Python 不同控制台中的subprocess.Popen

Python 不同控制台中的subprocess.Popen,python,python-2.7,subprocess,popen,Python,Python 2.7,Subprocess,Popen,我希望这不是复制品 我正在尝试使用subprocess.Popen()在单独的控制台中打开脚本。我试过设置shell=True参数,但没有成功 我在64位Windows7上使用32位Python 2.7 from subprocess import * c = 'dir' #Windows handle = Popen(c, stdin=PIPE, stderr=PIPE, stdout=PIPE, shell=True) print handle.stdout.read() handle.

我希望这不是复制品

我正在尝试使用
subprocess.Popen()
在单独的控制台中打开脚本。我试过设置
shell=True
参数,但没有成功

我在64位Windows7上使用32位Python 2.7

from subprocess import *

c = 'dir' #Windows

handle = Popen(c, stdin=PIPE, stderr=PIPE, stdout=PIPE, shell=True)
print handle.stdout.read()
handle.flush()
如果不使用
shell=True
,则必须为
Popen()
提供列表而不是命令字符串,例如:

c = ['ls', '-l'] #Linux
然后打开它,不带外壳

handle = Popen(c, stdin=PIPE, stderr=PIPE, stdout=PIPE)
print handle.stdout.read()
handle.flush()
这是从Python调用子流程最手动、最灵活的方法。 如果您只是想要输出,请选择:

from subproccess import check_output
print check_output('dir')

要打开新的控制台GUI窗口并执行X:
要在其他控制台中打开,请执行以下操作(在Win7/Python 3上测试):

相关的

在Linux上shell=True将实现以下功能:


command='python someFile.py'
subprocess.Popen('xterm-hold-e“%s”命令)

不适用于gnome终端,如下所述:


您没有显示实际的代码库,所以我只是根据windows中的
dir
和linux中的
ls
编写了一个命令示例,用于列出文件夹内容。@Torxed我尝试了您的代码,但有几件事我不喜欢:我没有看到新控制台弹出。我希望创建第二个控制台,并能够读取在新控制台中使用
popen
运行的程序的输出。在我的主程序中,我不需要使用
popen
运行的程序的输出。我只需要在另一个控制台中查看它。您能否提供一个如何实现此功能的示例?这在您最初的问题描述中并不清楚,因为您看到,“在单独的控制台中打开一个脚本”,这正是
.Popen()
所做的,如果您检查您的进程监视器,您会注意到从您调用
.Popen()
时启动了cmd.exe,它是不可见的,因为它是应用程序的子进程,并且是“静音的”。通常情况下,打开新的GUI窗口并不只是为了执行任务,所以我想问一下,为什么要这样做?因为我觉得这听起来有点倒退:/谢谢你。。。还有,我怎样才能让我的主程序等到第二个控制台完成执行,然后再获取返回代码呢?依我看,不要打开额外的GUI。在我的第一个示例中执行
X
,获取退出代码并在需要时只打印有价值的信息,忽略其余的输出。它更快更优雅。无论如何,
os.system()
会为您提供命令的返回代码,程序将等待命令完成,因为您没有使用线程,请参阅以获取有关线程的帮助。这正是我要查找的,谢谢:)。。。现在,在开始我的另一项任务之前,我必须设定一个节奏……这应该是公认的答案。在Windows中打开新控制台窗口的可靠方法是显式提供WINAPI进程创建标志。其他解决方案依赖于Python实现的副作用。
import os
os.system("start cmd /K dir") #/K remains the window, /C executes and dies (popup)
from subprocess import Popen, CREATE_NEW_CONSOLE

Popen('cmd', creationflags=CREATE_NEW_CONSOLE)

input('Enter to exit from Python script...')