如何从Python启动命令窗口

时间:2012-10-05 12:19:00

标签: python windows console subprocess popen

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

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

从DOS命令行,“start”命令执行我想要的操作。我可以:

start perf_test.py 2

start cmd /c perf_test.py 3

start cmd /c python perf_test.py 4

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

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

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

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

但即使使用shell=True,输出也会混合在我已经运行的窗口中。添加stdout=PIPE会停止,但我必须阅读p.stdout或使用{{ 1}}。将“cmd”添加到Popen大致相同:

p.communicate()

以上都没有达到我正在寻找的效果,即:“为此脚本弹出一个新的,不同的窗口,并在其自己的控制台中观看其输出滚动”(因为我真的想要并行运行这些客户端中的N个。

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

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

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

import os
os.startfile("perf_test.py")

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

我考虑过的其他方法,并且由于各种原因真的不喜欢:

  • 在自己的线程中运行每个“perf_test”。 (但我真的希望在自己的控制台中看到每个输出。)
  • 使用Tk制作我自己的伪控制台。 (图I我将在那里遇到不同的线程问题。)
  • 动态编写.BAT文件,其中包含“start perf_test.py 1”,“start perf_test.py 2”等行,然后使用os.startfile("perf_test.py 5") 或{{1}启动.BAT文件}}。

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

感谢您提供任何意见/建议!

4 个答案:

答案 0 :(得分:9)

您可以使用:

import os
os.system("start python perf_test.py 5")

答案 1 :(得分:0)

代码:

user = raw_input("welcome to cmd: ")
def print_perms(chars, minlen, maxlen): 
    for n in range(minlen, maxlen+1): 
        for perm in itertools.product(chars, repeat=n): 
            print(''.join(perm)) 

答案 2 :(得分:0)

我有同样的问题。用这种方法解决了。 您应该尝试:

security:
  oauth2:
    resource:
      filter-order: 3
      jwt:
        key-value: <public-key>

答案 3 :(得分:0)

import os
os.system("start cmd")