python: raise child_exception, OSError: Нет такого файла или каталога

Я выполняю команду в python, используя функцию subprocess.popen (), как показано ниже:

omp_cmd = 'cat %s | omp -h %s -u %s -w %s -p %s -X -' %(temp_xml, self.host_IP, self.username, self.password, self.port) xmlResult = Popen(omp_cmd, stdout=PIPE, stderr=STDOUT) 

В оболочке он работает отлично без ошибок, но в python я получаю:

  File "/home/project/vrm/apps/audit/models.py", line 148, in sendOMP xmlResult = Popen(omp_cmd, stdout=PIPE, stderr=STDOUT) File "/usr/local/lib/python2.7/subprocess.py", line 679, in __init__ errread, errwrite) File "/usr/local/lib/python2.7/subprocess.py", line 1228, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory 

Я искал ошибку, но ни одна из них не решила мою проблему. Кто-нибудь знает, в чем причина этой проблемы? Благодарю.

  • Как получить экземпляр colorbar из рисунка в matplotlib
  • Инвертирование больших разреженных матриц с помощью scipy
  • ImportError: нет модуля с именем oauth2client
  • Python: как получить информацию о запуске startbar () из одного окна (класса) в другое
  • Вложенная сессия SSH с Paramiko
  • Подавление InsecureRequestWarning: запрос не проверен HTTPS выполняется в Python2.6
  • Преобразование списка в словарь в Python
  • Как я могу использовать DLL-файл из Python?
  • One Solution collect form web for “python: raise child_exception, OSError: Нет такого файла или каталога”

    Если вы собираетесь передать команду в виде строки в Popen и если в командах есть каналы с другими командами, вам нужно использовать ключевое слово shell=True .

    Я не очень хорошо знаком с командой omp , но это ужасно пахнет, как бесполезное использование кошки. Я бы подумал, что лучший способ добиться этого – это:

     import shlex omp_cmd = 'omp -h %s -u %s -w %s -p %s -X %s' %(self.host_IP, self.username, self.password, self.port, temp_xml) xmlResult = Popen(shlex.split(omp_cmd), stdout=PIPE, stderr=STDOUT) 

    Или, если это не бесполезное использование cat (вам действительно нужно передать файл через stdin), вы можете сделать это и с подпроцессом:

     import shlex omp_cmd = 'omp -h %s -u %s -w %s -p %s -X -' %(self.host_IP, self.username, self.password) with open(temp_xml) as stdin: xmlResult = Popen(shlex.split(omp_cmd), stdin=stdin, stdout=PIPE, stderr=STDOUT) 
    Python - лучший язык программирования в мире.