Каков формат листинга Popen и call в python subprcoess? - PullRequest
1 голос
/ 08 марта 2019

Недавно я познакомился с полезной библиотекой подпроцесса и ее методами Popen и call для отсоединения процессов от процесса python. Тем не менее, меня несколько смущают общие правила формирования списка, который передается в качестве аргумента для popen. Первый вопрос: почему я не могу просто передать одну строку, как то, что я бы ввел в терминал, вместо разделения элементов на элементы списка?

А каковы общие правила? Например, если команда оболочки выглядит как

/usr/bin/env python3 script.py arg1 arg2

тогда как должен выглядеть список аргументов Popen? Могу ли я передать любую команду оболочки? Тогда где я могу найти общие правила для разделения любой команды оболочки на элементы списка?

1 Ответ

0 голосов
/ 08 марта 2019

Это может быть дубликатом:

Использование вызова подпроцесса Python для вызова скрипта Python

Вы хотите запустить скрипт Python в новом подпроцессе?

Обратите внимание, что разветвление в Linux полностью отличается от Windows.

Как правило, вы должны передать список аргументов следующим образом:

p = subprocess.Popen([command, arg1, arg2,],
                     stdout=subprocess.PIPE)

, где

command = "python" # or "python3"

и вы можете получить вывод или обработать ошибку:

output, error = p.communicate()

этот псевдоним должен быть в вашем PATH, в противном случае вы должны использовать полный путь к этому двоичному файлу или virtualenv ...

Подумайте об использовании async, если вы используете Python3, но, конечно, возможно, это не принесет пользы для вашего варианта использования.

...