subprocess.stdout ведет себя по-разному с shell = True и shell = False - PullRequest
5 голосов
/ 04 февраля 2012

У меня есть скрипт Python под названием class.py с одной строкой:

class.py:

print "Hello World"

Я запускаю его в подпроцессе, вот так.

run_subprocess.py:

import subprocess

p = subprocess.Popen(["python", "class.py"], stdin=subprocess.PIPE, shell=True,
                     stdout=subprocess.PIPE)
a = p.communicate()

print a

Когда я запускаю это (на Mac), я получаю пустую командную строку:

$ python run_subprocess.py
('', None)

Когда я запускаю это с shell = False, я получаю содержимое stdout:

run_subprocess.py:

import subprocess

p = subprocess.Popen(["python", "class.py"], stdin=subprocess.PIPE, shell=False,
                     stdout=subprocess.PIPE)
a = p.communicate()

print a


$ python run_subprocess.py
('hello world\n', None)

Почему? Как я могу получить содержимое stdout при запуске подпроцесса с shell=True?

Спасибо, Kevin

1 Ответ

5 голосов
/ 04 февраля 2012

Первый аргумент Popen интерпретируется по-разному в зависимости от значения shell.Вам нужно передать команду и ее аргументы другим способом.Пожалуйста, прочитайте документацию (я ответил на похожий вопрос пару дней назад).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...