35

我希望这不是重复的。

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

我在 64 位 Windows 7 上使用 32 位 Python 2.7。

4

3 回答 3

45

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

from subprocess import Popen, CREATE_NEW_CONSOLE

Popen('cmd', creationflags=CREATE_NEW_CONSOLE)

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

有关的

如何生成新的 shell 以从基本 python 脚本运行 python 脚本?

于 2013-12-16T13:49:02.497 回答
9
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:

import os
os.system("start cmd /K dir") #/K remains the window, /C executes and dies (popup)
于 2013-04-09T10:44:04.847 回答
1

在 Linux shell=True 上可以解决问题:

command = 'python someFile.py' subprocess.Popen('xterm -hold -e "%s"' % command)

不适用于 gnome-terminal,如下所述:

https://bbs.archlinux.org/viewtopic.php?id=180103

于 2016-08-11T19:22:19.963 回答