2013-07-13 3 views
3

Я потянув меня за волосы, пытаясь разобрать вывод следующей Баш скрипт в PythonПроблема чтения Баш выход сценарий в Python

#!/bin/bash 
for pid in `ps aux | grep '[i]nclude' | grep -v '[i]gnore' | awk '{ print $2 }'`; do ps -p $pid -o pid= -o etime=; done 

используя os.popen, как это, но он возвращает пустой список.

>>>import os 
>>>p = os.popen('bin/findpid', 'r') 
>>>p.readlines() 
[] 

Аналогично, используя subprocess.Popen также не возвращает ничего

>>>import subprocess 
>>>subprocess.Popen('bin/findpid', shell=True) 

Запуск сценария в баш выдает что-то вроде этого

8849 02:58:26 
9696 01:58:27 

Что я делаю неправильно?

+0

Ваши скрипты отлично работают для меня. Есть ли сообщения об ошибках? Вы сделали свой исполняемый файл сценария Bash? – jeyk

+1

Извините, я должен был упомянуть, что он работает в Python 2.7, но не 2.6, это версия, в которой я должен ее запускать. – drjeep

+0

Итак, никаких сообщений об ошибках? – jeyk

ответ

0

Вы можете попробовать это (я использовал Python 2.6.6, но может быть вы хотите в последнем питона 2.6):

#!/usr/bin/python 

import subprocess 
import os 

CMD = "bin/findpid" 
p = subprocess.Popen(CMD, shell=True, stdout=subprocess.PIPE) 
print p.communicate()[0] 

UPDATE: вероятно, первый Grep из findpid сценария нужно -v тоже?

+1

Извините, до сих пор не повезло в 2.6.8. Может быть что-то отсутствует в сценарии Bash? Простые команды, такие как «ls», работают нормально, используя приведенный выше код. – drjeep

+0

Я удалил те | grep '[i] nclude' | grep -v '[i] gnore', чтобы попробовать простой ps aux, и это сработало. Может быть, -в для первого грепа нужно? –

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