最近要测试一个问题,需要打开三十多个cmd,不断tcping server 80端口看链路延时和tcp丢包重传情况。
因为测试的是压力,如果手动打开cmd很耗费时间,就想写一个python的小程序来实现这个功能。
首先先把tcping软件放到C:\Windows\System32这个路径下,确保cmd能够使用tcping
|
1 2 3 4 5 6 7 |
import os import subprocess os.system('tcping 192.168.88.2') #用os.system可以在工作台上看到得到的结果 sub=subprocess.Popen('tcping 192.168.88.2',shell=True) sub.wait() #用subprocess.Popen在shell下实现,用wait()看回显结果 |
可以同时打开多个进程
|
1 2 3 4 5 |
import subprocess sub=subprocess.Popen('tcping -t 192.168.88.2',creationflags=subprocess.CREATE_NEW_CONSOLE) #直接调用tcping.exe在新窗口打开 sub=subprocess.Popen('cmd.exe /C tcping -t 192.168.88.2',creationflags=subprocess.CREATE_NEW_CONSOLE) #在cmd中调用tcping.exe在并新窗口打开 |
这上面两种方法都可以实现tcping并在新窗口打开,而且要结束kill进程,都是kill tcping.exe,第二种方法虽然在cmd中调用,只kill cmd.exe关闭不了窗口。
写一个简单的for循环即可实现
|
1 2 3 |
import subprocess for i in range(30): sub = subprocess.Popen('tcping -t 192.168.88.2', creationflags=subprocess.CREATE_NEW_CONSOLE) |
由于实现的不断tcping,不关闭窗口或者不输入Ctrl+C是不会停止,因此要结束运行还要写个简单的小程序直接kill运行的进程。
要kill进行要么kill进程号要么kill进程名称,这里推荐kill进程名称,因为在实现kill 进程号的时候发现,在运行的时候进程号会发生改变,导致进程无法kill.
|
1 2 |
import os os.system('taskkill /IM tcping.exe /F') |
|
1 2 3 4 5 6 |
import psutil print(psutil.pids()) #查看进程号 pid_name = [psutil.Process(i).name() for i in psutil.pids()] print(pid_name) #查看进程名 |
ps: taskkill的用法
taskkill [/S system [/U username [/P [password]]]]
{[/FI filter] [/PID processid] | /IM imagename} [/T] [/F]
常用调用方式为:
