我试图使用subprocess在python脚本中执行unfluff,但结果总是空的。 如果我从shell执行它,它就正常了。举个例子:
从unfluff文档中,我可以通过以下方式提取网页内容:
curl -s 'http://observador.pt/2016/10/29/espanha-e-portugal-sao-unicos-paises-da-ue-sem-populismo-xenofobo-diz-antonio-costa' | unfluff
这将产生一个具有良好内容提取的json。 现在,在python中,我使用以下内容:
import subprocess
url = 'http://observador.pt/2016/10/29/espanha-e-portugal-sao-unicos-paises-da-ue-sem-populismo-xenofobo-diz-antonio-costa'
p = subprocess.Popen(['curl','-s',url,'|','unfluff'],stdout=subprocess.PIPE)
print p.communicate()[0]
结果是一个空字符串。 那么,我做错了什么?你知道吗
通过在命令中使用
|
,可以隐式地调用OS shell。你知道吗因此,您必须启用
shell=True
才能做到这一点。你知道吗注意:由于您有
Popen
,因此可以通过打开2个Popen
实例以更简洁的方式来完成,例如:(那么您不需要
shell=True
参数,EDIT:您仍然需要第二个Popen
上的shell=True
参数,可能是因为unfluff
不是一个真正的可执行文件,所以需要shell来启动)规则是:如果你想安全,总是设置
shell=True
,但是命令行依赖于OS shell,效率较低。所以如果没有它也能用,那就更好了。你知道吗相关问题 更多 >
编程相关推荐