检查python命令的输出

时间:2013-08-15 00:25:16

标签: python

我有一个python脚本,它尝试运行外部命令并查找命令的结果。它需要使用外部命令输出中的'count ='值

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”)得到执行,我在shell中看到count = 10。但是为什么我的python找不到它并在上面的'if'子句中打印出“count = 10?”?

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:0)

可能会将其打印到stderr。尝试将该值重定向到PIPE并从那里读取数据。您还可以将2>&1附加到命令的末尾,以使stderr被shell重定向到stdout。您可能需要为此添加shell=True