将输入传递给 Popen 进程

Pass input to Popen process

对于以下情况,我找不到合适的解决方案。所以,基本上我想通过管道传输两个 shell 命令,并将一些输入数据(此处为 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: 并停止,尽管我已经传递了密码短语(我的 mypassword 输入)。

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

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

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

管道输入