我有一个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?”?
答案 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
。