【问题标题】:how to launch a command window from Python如何从 Python 启动命令窗口
【发布时间】:2012-09-26 14:27:51
【问题描述】:

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

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

在 DOS 命令行中,“开始”命令执行我想要的操作。我可以:

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 或使用p.communicate()。将“cmd”添加到 Popen 大致相同:

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

以上都没有达到我想要的效果,即:“pop open a new, distinct window for this script, and watch its output scroll by in its own console”(因为我真的很想并行运行这些客户端中的 N 个)。

我求助的另一件事几乎也有效。

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

这会立即返回,并且会弹出一个实际的 dosbox。耶!成功!也就是说,直到我尝试添加一个论点。这失败了:

os.startfile("perf_test.py 5")

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

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

  • 在各自的线程中运行每个“perf_test”。 (但我真的很想在各自的控制台中看到输出。)
  • 用 Tk 制作我自己的伪控制台。 (图我会在那里遇到不同的线程问题。)
  • 使用“start perf_test.py 1”、“start perf_test.py 2”等行动态动态写入 .BAT 文件,然后使用 Popenstartfile 启动该 .BAT 文件。

我希望最后一个会起作用......我想这是我最后的手段,如果我无法获得 Python 脚本直接执行此操作。

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

【问题讨论】:

  • 您希望每个控制台在 Python 脚本完成执行后保持打开状态吗?

标签: python windows console subprocess popen


【解决方案1】:

你可以使用:

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

【讨论】:

    【解决方案2】:

    好吧,我也遇到了同样的问题。用这种方法解决了。 你应该试试:

    import os
    os.system('chrome.exe') # open Chrome (.exe  file)
    

    【讨论】:

      【解决方案3】:

      代码:

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

      【讨论】:

      • 为什么 OP 应该使用你的代码?请给出更详细的答案
      【解决方案4】:
      import os
      os.system("start cmd")
      

      【讨论】:

        猜你喜欢
        • 2011-08-07
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 2011-05-27
        相关资源
        最近更新 更多