如何使用Python subprocess模块执行以下shell命令?
echo "input data" | awk -f script.awk | sort > outfile.txt
Run Code Online (Sandbox Code Playgroud)
输入数据将来自一个字符串,所以我实际上并不需要echo.我已经走到这一步了,任何人都可以解释我是如何通过它来解决的sort吗?
p_awk = subprocess.Popen(["awk","-f","script.awk"],
stdin=subprocess.PIPE,
stdout=file("outfile.txt", "w"))
p_awk.communicate( "input data" )
Run Code Online (Sandbox Code Playgroud)
更新:请注意,虽然下面接受的答案实际上没有回答问题,但我相信S.Lott是对的,最好避免首先解决这个问题!
我是Python新手,尝试过谷歌搜索,但没有帮助..
我需要在管道中调用此类命令(从mailq获取最旧的待处理邮件):
mailq |grep "^[A-F0-9]" |sort -k5n -k6n |head -n 1
Run Code Online (Sandbox Code Playgroud)
该命令在 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]
Run Code Online (Sandbox Code Playgroud)
但我得到这样的输出:
排序: 写入失败: 标准输出: 管道损坏\n排序: 写入错误\n
想知道是什么导致了这样的错误?