2016-12-06 4 views
-1

Команда, которую я хочу назвать выглядит примерно так:subprocess.call сбой вызова команды с вводом файла

mycmd arg1 arg2 arg3 < infile.ext >> outfile.ext

где infile.ext файл mycmd читает для выполнения своего процесса, тогда как outfile.ext - это что-то вроде файла журнала.

Мой Python код:

from subprocess import call 

impArgs = "%s %s %s < %s >> %s" % (arg1, arg2, arg3, impFilePath, rptFilePath) 
impResult = call(["mycmd ", impArgs]) 

я получаю impResult из 3, без ошибок, но команда не не дозвонились. Как это исправить?

+0

Я был бы признателен, если отрицательные поставщики обратной связи может обеспечить конструктивное предложение, что улучшить в этом вопросе, а не просто требовать закрытие – amphibient

ответ

0

Вместо

impArgs = "%s %s %s < %s >> %s" % (arg1, arg2, arg3, impFilePath, rptFilePath) 
impResult = call(["mycmd ", impArgs]) 

Я использовал

impCmd = "mycmd %s %s %s < %s >> %s" % (arg1, arg2, arg3, impFilePath, rptFilePath) 
impResult = call(impCmd, shell = True) 

shell = True является то, что проблема будет устранена, код результата был 0 и команда была выполнена.

1

Вы используете функции перенаправления своей оболочки. Popen по умолчанию просто запускает процесс. Он не использует оболочку, так как в базовом корпусе оболочка вообще не нужна.

Либо используйте shell=True и передайте всю команду как строку.

из подпроцесса импорта вызова

impArgs = "mycmd %s %s %s < %s >> %s" % (arg1, arg2, arg3, impFilePath, rptFilePath) 
impResult = call(impArgs, shell=True) 

Или использовать функциональные возможности трубопроводов как shown in docs:

with open(impFilePath) as src, open(rptFilePath) as dst: 
    call(['mycmd', arg1, arg2. arg3], stdin=src, stdout=dst) 
+0

показало, что тем временем. см. мой ответ ниже – amphibient