Python, используя subprocess.Popen для вызова командной строки linux?Я получаю "[Errno 2] Нет такого файла или каталога" - PullRequest
5 голосов
/ 01 октября 2010

Я пытаюсь проследить информацию, которую я могу найти о подпроцессе. Откройте, как я хочу сделать вызов командной строки Linux. Я пытаюсь, как показано ниже, но получаю ошибку "[Errno 2] Нет такого файла или каталога ». Я не пытаюсь открыть файл, поэтому я не понимаю эту ошибку, и она работает нормально (хотя с другими проблемами, связанными с ожиданием завершения процесса, когда я этого не хочу), когда я использую обычную операционную систему .popen.

Я не могу понять, как это сделать правильно, любой совет приветствуется.

РЕДАКТИРОВАТЬ: КОМАНДА, которую Я ИСПОЛЬЗУЮ, является СЛОЖНОЙ И ПЕРЕМЕННОЙ, было бы слишком неконтролируемо включать ее здесь, я думаю, достаточно сказать, что код работает, когда я использую os.popen, а не когда новый способ, так что нет, «вызов командной строки Linux», очевидно, не вызов, который я использую

subprocess.Popen([r"linux command line call"])
>>> [Errno 2] No such file or directory

1 Ответ

16 голосов
/ 01 октября 2010
import subprocess    
proc=subprocess.Popen(['ls','-l'])  # <-- Change the command here
proc.communicate()

Popen ожидает список строк.Первая строка - это обычно запускаемая программа, за которой следуют ее аргументы.Иногда, когда команда сложна, для составления списка удобно использовать shlex.split:

import shlex
proc=subprocess.Popen(shlex.split('ls -l'))  
proc.communicate()
...