【发布时间】:2017-05-05 10:20:00
【问题描述】:
我是 Python 新手,试过谷歌搜索,但没有帮助..
我需要在管道中调用此类命令(从 mailq 获取最旧的待处理邮件):
mailq |grep "^[A-F0-9]" |sort -k5n -k6n |head -n 1
该命令在 shell 中运行。
在 Python 中我写了以下内容:
p = subprocess.Popen( 'mailq |grep \"^[A-F0-9]\" |sort -k5n -k6n |head -n 1', shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
response = p.communicate()[0]
但我得到这样的输出:
排序:写入失败:标准输出:管道损坏\n排序:写入错误\n
想知道是什么导致了这样的错误?
【问题讨论】:
-
不确定,但
stdin=subprocess.PIPE似乎是多余的,可能是问题所在。您可能还考虑放弃除mailq之外的所有内容并在python 中处理输出,而不是调用所有这些额外的程序(我希望有一个模块可以在某处替换mailq)。转义双引号看起来也很可疑,尽管我怀疑这会导致这个问题。 -
@cdarke 试图删除标准输入集,但这没有帮助。所以你建议不要调用 shell 命令,而是使用一些现成的库与 mailq 一起工作?
-
你没有使用任何我能看到的shell命令,
grep、sort、head都是独立的程序。正则表达式和排序都是python内置的。
标签: python pipe stdout mail-queue