如何生成新shell以从基础Python脚本运行Python脚本?

emi*_*uel 28 python subprocess

我已经成功运行了几个Python脚本,使用子进程模块从基本脚本调用它们:

subprocess.popen([sys.executable, 'script.py'], shell=True)
Run Code Online (Sandbox Code Playgroud)

但是,这些脚本中的每一个都会执行一些模拟(来自C++应用程序的.exe文件),这些模拟会向shell生成一些输出.所有这些输出都写入我发布这些脚本的基本shell.我想为每个脚本生成一个新shell.我shell=True在调用subprocess.call时尝试使用该属性生成新shell (也尝试使用popen),但它不起作用.

如何为subprocess.call生成的每个进程获取一个新shell?

我正在阅读Spencer建议的关于stdin和stdout的文档,并找到了解决问题的标志:subprocess.CREATE_NEW_CONSOLE.也许重定向管道也可以完成工作,但这似乎是最简单的解决方案(至少对于这个特定的问题).我刚测试它并完美地工作:

subprocess.popen([sys.executable, 'script.py'], creationflags = subprocess.CREATE_NEW_CONSOLE)
Run Code Online (Sandbox Code Playgroud)

Ped*_*ner 43

要在不同的控制台中打开,请执行(在Windows 7/Python 3上测试):

from sys import executable
from subprocess import Popen, CREATE_NEW_CONSOLE

Popen([executable, 'script.py'], creationflags=CREATE_NEW_CONSOLE)

input('Enter to exit from this launcher script...')
Run Code Online (Sandbox Code Playgroud)

  • Python 3使用输入而不是raw_input. (9认同)
  • 谢谢你的回答,遗憾的是CREATE_NEW_CONSOLE似乎不适用于python 2.7.有什么方法吗? (9认同)
  • aaaaaahhhhhhhhh !!!! 我刚刚花了30分钟才找到这个特别的答案.谢谢,你可能会得到另外10K的赞成票. (4认同)
  • 不幸的是,`CREATE_NEW_CONSOLE` 只能用于 Windows 操作系统。([来源](/sf/ask/3085652951/)) (3认同)

Spe*_*bun 10

Popen已经生成了一个处理事物的子流程.您只需要重定向输出管道.查看子流程文档,特别是关于popen stdin,stdout和stderr重定向的部分.

如果不重定向这些管道,它将从父管道继承它们.只是要小心你的进程死锁.

您希望每个子流程都有其他窗口.这也是处理.查看子进程的startupinfo部分.它解释了在Windows上设置哪些选项来为每个子进程生成一个新终端.请注意,它需要使用shell = True选项.