将输入传递给Popen进程

时间:2017-07-28 15:19:17

标签: python subprocess popen

我无法找到适合下列情况的解决方案。所以,基本上我想管道两个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:输入)。

我的错在哪里,如何解决?

1 个答案:

答案 0 :(得分:2)

xargs的标准输出是find的输出,你不能 输入其他内容。

一种选择是将find的结果写入文件并使用xargs的-a--arg-file)选项。这将允许您输入文件名,同时保持stdin可以自由地从您的python程序(通过communicate)管道输入