Я хочу назначить вывод команды, которую я использую, os.system
переменной и предотвратить ее вывод на экран. Но в приведенном ниже коде выходные данные отправляются на экран, и значение, напечатанное для, var
равно 0, что, я полагаю, означает, была ли команда выполнена успешно или нет. Есть ли способ присвоить вывод команды переменной, а также остановить ее отображение на экране?
var = os.system("cat /etc/services")
print var #Prints 0
os.system
(иos.popen
, согласно принятому вами ответу): используйтеsubprocess.Popen
, это намного лучше!subprocess.Popen
- просто добавьтеshell=True
!shell=True
- (вообще) очень плохая идея! Вы должны быть очень уверены в том, что вы исполняете :)Ответы:
Из " Эквивалента Bash Backticks в Python ", который я давно спрашивал, вы можете использовать
popen
:Из документов для Python 3.6 ,
Вот соответствующий код для
subprocess
:источник
subprocess.check_output
решение Уолтера ближе к Pythonic one-liner, которое, кажется, вы ищете, если вас это не волнуетstderr
.os.popen
?shell=True
. См. Docs.python.org/3/library/…shell=True
, но это также неправильно в этом случае.shell=True
делает оболочку дочерним процессом, а неcat
так,out
иerr
являются stdout / stderr процесса оболочки, а неcat
процессаВозможно, вы также захотите взглянуть на
subprocess
модуль, который был создан для замены всего семействаpopen
вызовов Python- типа.Преимущество этого метода в том, что при вызове команд существует масса гибкости, когда соединяются стандартные потоки ввода / вывода / ошибок и т. Д.
источник
check_output
было добавлено с python 2.7 docs.python.org/2.7/library/…stderr=subprocess.STDOUT
также стандартные ошибкиМодуль команд представляет собой достаточно высокоуровневый способ сделать это:
статус равен 0, вывод - это содержимое / etc / services.
источник
Для python 3.5+ рекомендуется использовать функцию запуска из модуля подпроцесса . Это возвращает
CompletedProcess
объект, из которого вы можете легко получить вывод, а также код возврата. Поскольку вас интересует только вывод, вы можете написать служебную оболочку, подобную этой.источник
Я знаю, что на этот вопрос уже дан ответ, но я хотел бы поделиться потенциально более привлекательным способом вызова Popen с помощью
from x import x
функций и:источник
cmd.py
, а затем в свой основной файл я написалfrom cmd import cmdline
и использовал его по мере необходимости.я делаю это с помощью временного файла os.system:
источник
Python 2.6 и 3 специально говорят, чтобы не использовать PIPE для stdout и stderr.
Правильный путь
источник