2012-10-05 100 views
3

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

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

从DOS命令行,“开始”命令做我想做的。我可以:

start perf_test.py 2 

start cmd /c perf_test.py 3 

start cmd /c python perf_test.py 4 

(这会为你工作,如果你有正确的 “文件关联” 设置为* .py文件有。是其他线程,如果你需要帮助,或者使用python exe和/或脚本的完整路径)。

My ch allenge是:我如何从Python获得相同的效果?

使用subprocess库,我已经试过的变化是这样的:

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

但即使shell=True,输出在我已经在运行窗口中添加混合停止stdout=PIPE的是,后来我必须阅读p.stdout或使用p.communicate()。添加“CMD”到POPEN得到大致相同的:

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

以上都不是达到我期待的效果,这就是:“弹出打开一个新的,不同的窗口,这个剧本,以及手表它的输出在自己的控制台中滚动“(因为我真的想并行运行N个这样的客户端)。

另一件事我转向差不多作品也。

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

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

os.startfile("perf_test.py 5") 

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

我考虑过的其他方法,以及由于各种原因而不太喜欢的方法:

  • 在其自己的线程中运行每个“perf_test”。 (但是我真的很想在自己的控制台中看到每个输出。)
  • 用Tk制作我自己的伪控制台。 (图1我只是遇到了不同的线程问题。)
  • 动态地使用“启动perf_test.py 1”,“启动perf_test.py 2”等行的方式动态写入.BAT文件,然后启动该.BAT文件,其中包含Popenstartfile

我期待最后的工作......我想是我的最后手段,如果我不能直接获取Python脚本。

感谢您的任何意见和建议!

+0

你想要的Python脚本执行完毕后,每个控制台保持开放? – martineau

回答

6

您可以使用:

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

太简单了...以及我正在寻找的东西。我发誓我也尝试了很多'os.system()'变种。谢谢! –

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)) 
+1

为什么OP应该使用你的代码?请给出更详细的答案 – Zippy