2012-01-03 3 views
4

Так им пытается сохранить вывод из моего subprocess.call, но я получаю следующее сообщение об ошибке: AttributeError: 'int' object has no attribute 'communicate'Python: Ловля вывода subprocess.call с стандартным выводом

кода выглядит следующим образом:

p2 = subprocess.call(['./test.out', 'new_file.mfj', 'delete1.out'], stdout = PIPE) 
output = p2.communicate[0] 

ответ

4

Вы ищете subprocess.Popen() вместо call().

Вам также необходимо изменить его на p2.communicate()[0].

3

Это потому, что subprocess.call возвращает INT:

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False) 

    Run the command described by args. Wait for command to complete, then return the returncode attribute. 

Похоже, что вы хотите subprocess.Popen().

Вот типичный кусок кода, который я должен сделать это:

p = Popen(cmd, stdout=PIPE, stderr=PIPE, bufsize=256*1024*1024) 
output, errors = p.communicate() 
if p.returncode: 
    raise Exception(errors) 
else: 
    # Print stdout from cmd call 
    print output 
0

Вы должны использовать подпроцесс

try:    
     subprocess.check_output(['./test.out', 'new_file.mfj', 'delete1.out'], shell=True, stderr=subprocess.STDOUT) 
    except subprocess.CalledProcessError as exception: 
     print exception.output 
Смежные вопросы