如何从Python启动命令窗口

Dan*_*n H 4 python windows console subprocess popen

我想在Windows上使用Python 2.6来启动几个单独的命令窗口,每个窗口都运行自己的Python脚本.目的是:这些是客户端,我正在尝试使用来自多个准独立客户端的请求来加载服务器.

我不需要在运行期间或之后与客户端通信,但我确实需要发送每个不同的commmandline arg,并且我希望每个客户端的输出在其自己的"控制台"中滚动.

从DOS命令行,"start"命令执行我想要的操作.我可以:

start perf_test.py 2
Run Code Online (Sandbox Code Playgroud)

要么

start cmd /c perf_test.py 3
Run Code Online (Sandbox Code Playgroud)

要么

start cmd /c python perf_test.py 4
Run Code Online (Sandbox Code Playgroud)

(如果您为*.py文件正确设置了"文件关联",这些将对您有用.如果您需要帮助,还有其他线程.或者,使用python exe和/或脚本的完整路径.)

我的挑战是:如何从Python中获得相同的效果?

使用subprocess库,我尝试过这样的变体:

from subprocess import *
p = Popen(["perf_test.py", "4"], shell=True, stdin=PIPE)
Run Code Online (Sandbox Code Playgroud)

但即便如此shell=True,输出也会混合在我已经运行的窗口中.添加stdout=PIPE停止,但我必须阅读p.stdout或使用p.communicate().将"cmd"添加到Popen大致相同:

p = Popen(["cmd", "/c", "perf_test.py", "4"], shell=True, stdin=PIPE)
Run Code Online (Sandbox Code Playgroud)

以上都没有达到我正在寻找的效果,即:" 为这个脚本弹出一个新的,独特的窗口,并在自己的控制台中观看它的输出滚动 "(因为我真的想要运行这些客户端中的N个)在平行下).

我转向的另一件事几乎也有效.

import os
os.startfile("perf_test.py")
Run Code Online (Sandbox Code Playgroud)

这会立即返回,并弹出一个实际的dosbox.好极了!成功!也就是说,直到我尝试添加一个参数.这失败了:

os.startfile("perf_test.py 5")
Run Code Online (Sandbox Code Playgroud)

错误"系统找不到指定的文件"...因为它在文件名中添加了"[SPACE] 5".(参数的目的是每个"perf_test"需要有一个分配的ID,以便它们作为不同的实例命中服务器.)

我考虑过的其他方法,实际上并不喜欢各种原因:

  • 在自己的线程中运行每个"perf_test".(但我真的希望在自己的控制台中看到每个输出.)
  • 用Tk制作我自己的伪控制台.(图我只会遇到不同的线程问题.)
  • 使用"start perf_test.py 1","start perf_test.py 2"等行动态写入.BAT文件,然后用Popen或启动.BAT文件startfile.

我希望最后一个会工作......我想我是最后的选择,如果我不能直接使用Python脚本.

感谢您的任何意见/见解!

Rod*_*Rod 9

您可以使用:

import os
os.system("start python perf_test.py 5")
Run Code Online (Sandbox Code Playgroud)