我不明白为什么在Windows上做这件事这么难。
我想产生一堆命令提示符窗口,这些窗口将运行其他脚本。我想要这样做的原因是,我可以清楚地看到每个脚本的所有输出(如果我让它们只是主窗口中的线程/子进程,我就不能正确地查看所有输出)。我也不想记录输出,因为它主要用于查看进度条,而进度条并不能真正处理日志文件。
因此,我的需求的各个部分都可以工作,但不能一起工作:
os.system("start cmd /c {command here}") # Launches in new command prompt, closes when done
但是,os系统不会让我等到命令结束(因为start是实际的命令,所以当它打开新的命令提示符时,它就“完成”了)
同样,如果我尝试:
p = subprocess.Popen(["start", "cmd", "/k", "{command here}"], shell = True) # Needs to be shell since start isn't an executable, its a shell cmd
p.wait() # I can wait until finished (although it too finishes after start finishes)
那么我该怎么做呢?我在某处读到,一个解决方案可能是使用processgroup,但它是unix only....or之类的
或者,如果您有一种巧妙的方法在单个窗口中显示所有子进程的输出,那么我不需要打开新的命令提示符,只需使用线程。这也行得通,但是如果我有4个线程下载一些东西,并显示一个进度条,以及输出其他信息,我不知道如何以一种可以读取的方式显示(以及避免它们彼此冲突)。
PS:这是在Windows Vista上。PPS:我更喜欢在Windows,Linux和Mac上工作的解决方案,我现在专注于Windows,但我想要一个能同时适用于这三种系统的解决方案,我知道Windows是最挑剔的。我只需用"the start cmd /c“代替操作系统相应的命令。
发布于 2012-07-23 15:25:05
发布于 2016-11-24 14:06:06
被接受的答案对我不起作用。
要在新的命令提示符下打开,我必须使用:
os.system("start /B start cmd.exe @cmd /k mycommand...")
发布于 2020-03-20 21:27:50
对我来说,这似乎是可行的
os.system("cmd /k {command}")
使用/k
执行cmd,然后保持打开状态
使用/c
执行并关闭
打开一个新的命令窗口,然后执行命令
os.system("start cmd /k {command}")
https://stackoverflow.com/questions/11615455
复制