【发布时间】:2010-10-13 05:50:03
【问题描述】:
我的代码大致是这样的(整个代码有点太长,无法在此处复制):
import re
from subprocess import Popen, PIPE
goodOutput = re.compile(r'\S+: 0x[0-9a-fA-F]{8} \d \d\s+->\s+0x[0-9a-fA-F]{8}')
p = Popen(['/tmp/myexe', param], stdout=PIPE, stderr=PIPE, cwd='/tmp')
stdout, stderr = p.communicate()
ret = goodOutput.match(stdout)
if ret == None:
print "No match in: " + stdout
match() 与此不匹配,但如果我从 print 语句中复制标准输出并将上述脚本中的字符串用作标准输出的值,则它匹配。所以正则表达式模式应该没问题。另外,如果我从 stdin (stdout = sys.input.read()) 读取字符串,它会再次起作用。
我也尝试过 rstrip() 标准输出,但这也无济于事(此外, match() 不应该让这变得不必要吗?)。
当我用 repr() 打印标准输出时,字符串看起来像
'xxx[a]: 0xff2eff00 4 7\t->\t0xff2eff00\n'
如果我尝试 match() 到这个它不匹配。这是制表符和换行符的问题吗?如果是,我该怎么办?
【问题讨论】:
-
@Makis:repr(stdout).strip() 不起作用?
-
信息不足。转储 stdout 的值:
print repr(stdout),并完全消除 Popen 调用:stdout = output_of_repr,以独立的方式重现它。如果这不能告诉您发生了什么,请向我们展示该代码,以便我们实际运行它并查看发生了什么。 -
@Glenn Maynard:嗯,它清楚地说“不起作用”!我的意思是,你还需要什么?
-
Glenn:正如我所说,我已经尝试匹配标准输出,如果我手动设置它而不是从管道中读取它,它就会匹配。所以实际上我已经按照你的建议做了,但也许我的问题不够清楚(“..but if I copy the stdout from the print statement..”部分是我试图解释这一点。
-
你根本没有按照我说的去做。同样,向我们展示该代码,以便我们实际运行它并查看发生了什么。
标签: python regex subprocess stdout