Subprocess.Popen в другой консоли

Надеюсь, это не дубликат.

Я пытаюсь использовать subprocess.Popen(), чтобы открыть script в отдельной консоли. Я попытался установить параметр shell=True, но это не помогло.

Я использую 32-разрядный Python 2.7 на 64-битной Windows 7.

Ответ 1

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)

Ответ 3

Я попробовал createflags = CREATE_NEW_CONSOLE на Win7/python 2.7, и это тоже сработало.

Ответ 4

В Linux shell = True будет делать трюк:

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

Не работает с гном-терминалом, как описано здесь:

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