2016-08-23 7 views
2

Я читал this question, в котором спрашивающий оказывает конкретную проблему с запуском Баш в Python, используя такой код:Запуск команд bash в Python: os против подпроцесса?

os.system(bashCommand) 

Два верхних ответил просто сказать: «использовать subprocess» (вместо os.system), и дать пример быстрого кода.

Мой вопрос не является дубликатом.

Каков правильный способ запуска команд bash с Python и почему? Для меня кажется, что os.system - хороший вариант, предназначенный для такого типа вещей, и это просто случайность, что искатель другого вопроса не смог выполнить правильную функциональность с этим пакетом. Но есть ли «истинный питонический способ» использовать subprocess? Или, другими словами, в чем разница между os.system и subprocess?

+0

Лучший дубликат https://stackoverflow.com/questions/89228/calling-an-external-command-in-python?rq=1 – Nabin

ответ

2

Подпроцесс дает вам гораздо больший контроль над тем, что происходит.

Например, вы можете перенаправить вывод в канал, в программе так:

process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE) 
out, err = process.communicate() 

(Пример из python getoutput() equivalent in subprocess)

Если вы использовали system() вы должны сделать перенаправление ввода, сохраняя его в файл и такие странные вещи.


В документации os.system (https://docs.python.org/2/library/os.html#os.system) говорится, что:

Модуль подпроцесс обеспечивает более мощные средства для порождения новых процессов и получения их результатов; использование этого модуля предпочтительнее использования этой функции. См. «Замена старых функций» в разделе «Модуль подпроцесса» в документации по подпроцессу для некоторых полезных рецептов.

Смежные вопросы