使用子进程和Popen分离控制台窗口

时间:2015-11-26 09:57:19

标签: python python-3.x subprocess popen anaconda

我最近从python 2.7改为python 3.4和anaconda。

我必须对我的代码进行一些更改才能在3.4中工作但是我遇到了一个问题,我不确定它是由新版本的Python还是Anaconda本身造成的。

在我过渡之前,我有命令

p=subprocess.Popen('Location of .exe file')

这很好用,因为它在不同的窗口/控制台中打开我的.exe文件,当python程序在后台运行时我必须提供一些输入。

现在,当我尝试运行相同的命令时,在单独的控制台上,我必须在我的python程序运行的同一个控制台中提供我的输入。

任何方式让它回到原来的样子?并且有人可以向我解释一下导致这种变化的原因吗?在这个论坛上已经有一些关于这个问题的建议,但到目前为止还没有。

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

简单地从Python的第2版传递到第3版不应该产生这样的差异。

我认为在您原来的Python2.7环境中,您使用Pythonw.exe(注意结尾 w )来执行初始脚本,而在您正在使用的新Python3中{ {1}}。

两种版本都存在这两种口味。不同之处在于Python.exe是控制台应用程序,而Python.exe是GUI应用程序:

  • 从控制台启动时,Pythonw.exe使用其父控制台,并将其提供给其(控制台)子进程 - 如果从GUI程序(如资源管理器)启动,它将分配一个新的控制台
  • 从控制台启动时,Python.exe忽略其父控制台,并为任何(控制台)子进程分配新的控制台。但是如果你试图在没有脚本的情况下执行它,它会立即结束,因为它没有标准输入。

所以只需使用Pythonw.exe启动脚本,每个子进程都有一个控制台