2013-08-16 4 views
-1

Мне нужно запустить proccess в терминале, чтобы захватить вывод из него.Захват вывода с терминала

import subprocess 
subprocess.check_output(["my_util", "some_file.txt", " | grep 'Some data1' | awk '{print $2}'"]) 

#or 
subprocess.check_output(["my_util", "full_path/some_file.txt", "| grep 'Some data1'", "| awk '{print $2}'"]) 

И ничего не происходит в REPL, в то время как его запуск в терминале вручную дает мне правильный выход.

обновление:

выход из возвышенного текста:

my_util FAIL formats: can't open input pipe `| grep 'Sample data1'': premature EOF 
my_util FAIL formats: can't open input pipe `| awk '{print $2}'': premature EOF 
Traceback (most recent call last): 
    File "/test1.py", line 4, in <module> 
    "| grep 'Sample data1'", "| awk '{print $2}'"]) 
    File "/usr/lib/python2.7/subprocess.py", line 544, in check_output 
    raise CalledProcessError(retcode, cmd, output=output) 
subprocess.CalledProcessError: Command '["my_util", "full_path/some_file.txt", "| grep 'Some data1'", "| awk '{print $2}'"]' returned non-zero exit status 2 
+0

Вы уверены, что вы не получите исключение? – Brionius

+0

@Brionius, да. – Mataba

+0

@Brionius, я обновил сообщение – Mataba

ответ

1

os.system может быть использован вместо подпроцесса

import os 

os.system("my_util some_file.txt | grep 'Some data1' | awk '{print $2}'") 
+0

os устарел. – Mataba

+0

Вы попробовали? он вызывает ошибку из-за оператора «print», который Python рассматривает как его оператор. – Mataba

+0

Я протестировал его на своем сервере, используя «cat» вместо my_util. Все в порядке. Версия python - 2.6.6. – oldmonk

0

Я не думаю, что вы можете команды трубы, как, что в подпроцесс.

Here's a question с ответами, описывающими, как выполнять команды с подпрограммой.

Here's another description о том, как это сделать.

Смежные вопросы