将输入传递给 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
)
管道输入
对于以下情况,我找不到合适的解决方案。所以,基本上我想通过管道传输两个 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
)