【发布时间】:2020-01-11 03:44:50
【问题描述】:
我现在正在研究 Python,编写代码需要调用 WINDOWS cmd.exe 和 subprocess。
我想连续运行数千个进程,但同时运行的进程只有 6 个或更少。
文章Control the number of subprocesses using to call external commands in python 提供了解决方案,它在调用远程桌面之类的程序时似乎工作正常,关闭后会出现一个新程序。但是当我在调用cmd.exe 时应用这些代码时遇到了问题。代码如下:
import subprocess
from multiprocessing.pool import ThreadPool as Pool
def worker(cmd):
p = subprocess.Popen(cmd, );
p.wait()
commands = ['C:\Windows\System32\mstsc.exe',
'C:\Windows\System32\mstsc.exe',
'C:\Windows\System32\mstsc.exe',
'C:\Windows\System32\mstsc.exe',
'C:\Windows\System32\mstsc.exe',]
pool = Pool( processes = 2 );
results =[pool.apply_async(worker, [cmd]) for cmd in commands];
ans = [res.get() for res in results];
This works fine. A new window shows when one another closed.
这段代码运行良好。
但是如果进程是 cmd.exe
import subprocess
from multiprocessing.pool import ThreadPool as Pool
def worker(cmd):
p = subprocess.Popen(cmd, );
p.wait()
commands = ['cmd.exe /c start "Test1" /d E:\pyworkspace\FAST\ FAST_RV_W64.exe 334.in',
'cmd.exe /c start "Test2" /d E:\pyworkspace\FAST\ FAST_RV_W64.exe 893.in',
'cmd.exe /c start "Test3" /d E:\pyworkspace\FAST\ FAST_RV_W64.exe 9527.in',
'cmd.exe /c start "Test4" /d E:\pyworkspace\FAST\ FAST_RV_W64.exe 114514.in',
'cmd.exe /c start "Test5" /d E:\pyworkspace\FAST\ FAST_RV_W64.exe 1919810.in']
pool = Pool( processes = 2 );
results =[pool.apply_async(worker, [cmd]) for cmd in commands];
ans = [res.get() for res in results];
*FAST_RV_64.exe 是我的工具程序之一,*.in 是设置文件。
调用cmd.exe,所有cmd窗口同时跳出,限制无效。
import subprocess
from multiprocessing.pool import ThreadPool as Pool
def worker(cmd):
p = subprocess.Popen(cmd, );
p.wait()
commands = ['cmd.exe /c start "Test1" mstsc.exe',
'cmd.exe /c start "Test2" mspaint.exe',
'cmd.exe /c start "Test3" SnippingTool.exe',
'cmd.exe /c start "Test4" mstsc.exe',
'cmd.exe /c start "Test5" mspaint.exe']
pool = Pool( processes = 2 );
results =[pool.apply_async(worker, [cmd]) for cmd in commands];
ans = [res.get() for res in results];
如果我通过cmd.exe调用程序,它也会一起跳出来。
我也尝试了上面文章中的其他方法,但没有一个有效。
我想知道为什么会发生这种情况以及如何修复我的代码。
【问题讨论】:
-
你为什么要通过
cmd.exe而不是直接运行? -
@sam-mason 运行
cmd.exe显示与直接运行FAST_RV_64.exe相同的结果。cmd.exe在FAST_RV_64.exe执行后自动启动。
标签: python cmd subprocess