Могут быть две проблемы, почему вы не получаете вывод в stdout:
- Процесс выводит весь свой вывод в stderr.
- Система не знает, как выполнить
"imp -help"
.
Решение первой проблемы простое: захватить stderr с помощью аргумента stderr = subprocess.PIPE
.
Решение второго также легко, но объяснение немного длиннее: подпроцесс не много догадывается, он просто попытается выполнить всю строку одной командой. Это означает, что в вашем случае он попытается выполнить "imp -help"
как одну команду. Он не пытается выполнить команду "imp"
с аргументом "-help"
. Вы должны явно указать подпроцессу команду и аргументы отдельно.
Из питона Документация на подпроцесс:
аргументы должны быть строкой или последовательностью
аргументов программы. Программа для
Выполнение обычно является первым элементом в
последовательность аргументов или строка, если
задана строка, ...
Это означает, что вы должны разделить команду и аргументы и упаковать их вместе в последовательности. Это: "imp -help"
должно выглядеть так: ["imp", "-help"]
. Прочтите документацию для подпроцесса, чтобы узнать больше о тонкостях разделения команды и аргументов.
Вот как должен выглядеть код:
import subprocess
p=subprocess.Popen(["imp", "-help"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE)
out,err=p.communicate()
Примечание: вы также набрали p.communicate
вместо p.communicate()
. Я предполагаю, что это была опечатка в вашем вопросе, а не в вашем коде.