2013-08-15 4 views
-1

У меня есть скрипт python, который пытается запустить внешнюю команду и искать результат команды. И это нужно использовать значение «Count =» от выхода из внешней командыПроверьте вывод команды python

COUNT_EXP = re.compile("count=(.*)") 
cmd = [] # external command 
p = subprocess.Popen(cmd, 
         stdout=subprocess.PIPE, 
         stderr=subprocess.STDOUT) 
     for line in iter(p.stdout.readline, b''): 
      result = COUNT_EXP.match(line) 
      if result: 
       print "count= " + result.group(1) 
       return int(result.group(1)) 

Когда я пытаюсь запустить мой сценарий, мою внешней команды («CMD») получило выполнить и я вижу, кол = 10 в оболочка. Но почему мой питон не может найти это и распечатать «count = 10?» В предложении «if» выше?

+0

ваш объект if, вероятно, оценивает значение False, поэтому вы никогда не печатаете счет. Возможно, ваш рабочий каталог python не содержит файл. –

ответ

0

Возможно, это напечатано до stderr. Попробуйте перенаправить этот номер на номер PIPE и прочитать данные оттуда ... Вы можете также добавить 2>&1 в конце команды, чтобы получить stderr перенаправлены stdout оболочкой Вы, возможно, придется добавить shell=True для этого

1
p = subprocess.Popen(['python','blah.py'],stdout=subprocess.PIPE) 
while True: 
    line = proc.stdout.readline() 
    if len(line) != 0: 
    print "success" #if this code works, expanding to your regex should also work 
1

Я написал следующую программу C:

#include "stdio.h" 

int main() { 
    printf ("count=199"); 
    return 0; 
} 

... который я назвал countOutput.c и следующий сценарий Python, модифицированный от вашего:

import subprocess, re 

COUNT_EXP = re.compile("count=(.*)") 
cmd = "./countOutput" # external command 
p = subprocess.Popen(cmd, 
         stdout=subprocess.PIPE, 
         stderr=subprocess.STDOUT) 
for line in iter(p.stdout.readline, b''): 
    result = COUNT_EXP.match(line) 
    if result: 
     print "count is equal to " + result.group(1) 

... который я назвал countTest.py, а затем побежал:

$ python countTest.py 
count is equal to 199 

... который все работает, как ожидалось. Поэтому я склонен согласиться с @kichik, думая, что внешняя команда, которую вы используете, может писать до stderr, а не stdout.

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