我是Python的新手,尝试了谷歌搜索,但没有帮助。
我需要在管道中调用这些命令(从邮件队列中获取最旧的待处理邮件):
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排序:写入错误
stdin=subprocess.PIPE
似乎是多余的,可能是问题所在。您还可以考虑放弃除mailq
以外的所有内容,并在 Python 中处理输出,而不是调用所有这些额外的程序(我预计有一个模块可以替换mailq
)。双引号的转义看起来也很可疑,尽管我怀疑这不会导致此问题。 - cdarkegrep
、sort
、head
都是独立的程序。正则表达式和排序都内置在Python中。 - cdarke