Python 2.4.x在这里。
一直试图让subprocess与glob一起工作。
嗯,这是问题所在。
def runCommands(thecust, thedevice):
thepath='/smithy/%s/%s' % (thecust,thedevice)
thefiles=glob.glob(thepath + '/*.smithy.xml')
p1=subprocess.Popen(["grep", "<record>"] + thefiles, stdout=subprocess.PIPE)
p2=subprocess.Popen(['wc -l'], stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()
thecount=p2.communicate()[0]
p1.wait()
我在屏幕上收到许多“grep:写输出:断管”错误。
它必须是一些简单的我想念的,我无法发现它。有什么想法吗?
提前谢谢。
答案 0 :(得分:5)
这里的问题是,对于p2
,您的参数列表应为['wc', '-l']
而不是['wc -l']
。
目前正在寻找一个名为'wc -l'
的可执行文件来运行而不能找到它,因此p2
会立即失败并且没有任何内容连接到p1.stdout
,这会导致管道错误
请尝试以下代码:
def runCommands(thecust, thedevice):
thepath='/smithy/%s/%s' % (thecust,thedevice)
thefiles=glob.glob(thepath + '/*.smithy.xml')
p1=subprocess.Popen(["grep", "<record>"] + thefiles, stdout=subprocess.PIPE)
p2=subprocess.Popen(['wc', '-l'], stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()
thecount=p2.communicate()[0]
p1.wait()
答案 1 :(得分:0)
这似乎是因为在grep完成输出之前你正在关闭p1.stdout
。也许你打算关闭pt.stdin
?但是,似乎没有理由关闭其中任何一个,所以我只是删除p1.stdout.close()
语句。