我无法找到适合下列情况的解决方案。所以,基本上我想管道两个shell命令,并将一些输入数据(这里是import subprocess
subprocess.call([
'play', '-q', '/usr/share/sounds/KDE-K3B-Finish-Success.ogg' ],
env={'AUDIODEV':'plughw:1,0'} )
)传递给第二个。这里有一些代码证明了这个问题:
mypassword
运行时,它会在控制台中询问:import subprocess
import shlex
args1 = shlex.split("find /home/vasya/rmps/ -name *.rpm")
ps = subprocess.Popen(args1, stdout=subprocess.PIPE)
args2 = shlex.split("xargs rpmsign --addsign")
p2 = subprocess.Popen(args2, stdin=ps.stdout, stdout=subprocess.PIPE)
ps.stdout.close()
output = p2.communicate('mypassword\n')[0]
print(output)
并停止,尽管我已经传递了密码短语(我的Enter pass phrase:
输入)。
我的错在哪里,如何解决?
答案 0 :(得分:2)
xargs
的标准输出是find
的输出,你不能 输入其他内容。
一种选择是将find
的结果写入文件并使用xargs的-a
(--arg-file
)选项。这将允许您输入文件名,同时保持stdin
可以自由地从您的python程序(通过communicate
)管道输入