发布于2026-07-07 阅读(0)
扫一扫,手机访问
近期遇到一个测试需求,需要同时打开三十多个cmd窗口,不间断地对某个服务器的80端口做tcping,用来观察链路的延迟和TCP层面的丢包重传情况。
既然是做压力测试,手动点开30多个cmd窗口显然不现实,所以索性写了个Python脚本来自动完成这个操作。
准备工作也不复杂,先把tcping.exe放进C:\Windows\System32目录,保证在cmd里可以直接调用它。
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()看回显结果
如果要同时启动多个进程,os.system显然就不太够用了。subprocess模块才是正解。
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。不过要注意的是,如果要结束这些进程,两种方式都只需要结束tcping.exe就行。第二种方式虽然走了一层cmd,但关闭cmd窗口并不能关掉里面的子进程。
批量打开的写法其实就是一个简单的for循环:
import subprocess
for i in range(30):
sub = subprocess.Popen('tcping -t 192.168.88.2', creationflags=subprocess.CREATE_NEW_CONSOLE)
由于tcping是持续运行的,不手动关闭或者按Ctrl+C不会自动停止。所以还需要一个配套的脚本来统一结束这些后台进程。
结束进程时有两种思路:按PID杀,或者按进程名杀。实测下来按PID杀不太靠谱——进程在运行时PID可能会变动,容易出现杀不干净的情况。相比之下,按进程名批量kill要稳妥得多。
import os
os.system('taskkill /IM tcping.exe /F')
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]
常用调用方式为:

从实际测试的角度来看,批量启动和批量清理这两步缺一不可。关键在于进程管理的方式要选对——按名称杀进程比按PID杀进程稳定得多。这样的脚本虽然在逻辑上非常简单,但在压力测试场景下却能省下大量重复劳动的时间。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8