gpt4 book ai didi

python - 使用 python 子进程执行 unfluff

转载 作者:行者123 更新时间:2023-12-01 03:36:22 25 4
gpt4 key购买 nike

我正在尝试执行 unfluff在使用 subprocess 的 python 脚本中,但结果始终为空。如果我从 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]

这会产生一个空字符串。那么,我做错了什么?

最佳答案

通过在命令中使用 |,您将隐式调用操作系统 shell。

因此您必须启用 shell=True 才能执行此操作。

p = subprocess.Popen(['curl','-s',url,'|','unfluff'],stdout=subprocess.PIPE,shell=True)

注意:由于您有 Popen,您可以通过打开 2 个 Popen 实例以更简洁的方式完成此操作,例如如下所示:

p1 = subprocess.Popen(['curl','-s',url],stdout=subprocess.PIPE)
p2 = subprocess.Popen('unfluff',stdin=p1.stdout,stdout=subprocess.PIPE)
print(p2.communicate()[0])

(那么您不需要 shell=True 参数,编辑:您仍然需要第二个 Popen 上的 shell=True 参数> 可能是因为 unfluff 并不是真正的可执行文件,所以需要 shell 来启动)

规则是:如果您想安全,请始终设置 shell=True 但命令行取决于操作系统 shell,效率较低。因此,如果没有它也能正常工作,那就更好了。

关于python - 使用 python 子进程执行 unfluff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40324091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com