在单独的控制台窗口中启动应用程序(需要用户交互)

时间:2019-12-03 08:03:42

标签: python subprocess popen

我知道有关此主题的问题很多,但似乎没有一个答案可以解决我的所有要求。

我的要求

  • 启动另一个应用程序(应支持所有类型的应用程序:需要用户输入的长期运行的流程,快速结束的简单应用程序或需要较长时间的应用程序)
  • 还应该能够启动立即结束的应用程序(例如:“ git status”)
  • 它需要在新的控制台窗口中启动
  • 即使在命令完成后,控制台窗口也应保持活动状态,以查看应用程序输出。
  • 它必须是跨平台的(Windows和Linux)

我想使用子流程模块。我已经尝试使用选项CREATE_NEW_CONSOLE

subprocess.Popen(("git", "status"), close_fds=True, creationflags=subprocess.CREATE_NEW_CONSOLE | subprocess.STARTF_USESHOWWINDOW, shell=True)

但是:

  • 这实际上不起作用。我没有看到任何窗口正在启动,或者可能是正在启动但在执行命令后退出得太快。
  • 这仅适用于Windows。想知道是否有一种方法可以在所有平台上一致地执行此操作吗?

1 个答案:

答案 0 :(得分:0)

一种方法是使用子进程打开一个新的控制台窗口,然后在该窗口中运行命令。在Linux上,可以通过在命令后加上“ -e”标志来实现。

例如(基于https://stackoverflow.com/a/3531426

x-terminal-emulator -e "bash -c \"git status; exec bash\""

将打开默认终端的新窗口并运行命令

bash -c "git status; exec bash"
在该窗口中

。在Python中,这看起来像

subprocess.Popen('x-terminal-emulator -e "bash -c \\"git status; exec bash\\""', shell=True)

最后运行“ exec bash”会在控制台窗口中打开一个新的shell,并防止其立即退出。


根据this answer,在Windows上,您可以使用“ start cmd / k”,然后运行命令。我没有尝试过,但大概是

subprocess.Popen('start cmd /k git status', shell=True)

可以解决问题。