2017-07-28 11 views
1

次の場合に適切な解決策が見つかりません。ですから、基本的には2つのシェルコマンドをパイプし、いくつかの入力データ(ここではmypassword)を2番目のコマンドに渡します。 Enter pass phrase:をし、私はすでに(私のmypassword入力)パスフレーズを渡していたという事実にもかかわらず、停止します。それは、コンソールに尋ねる実行Popenプロセスに入力を渡す

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) 

:ここでは、問題を実証するいくつかのコードです。

私の過ちはどこにあり、どうすれば修正できますか?

答えて

2

xargsへのあなたの標準はfindの出力です、あなたはでもを入力することはできません。

findの結果をファイルに書き込んで、xargsの-a--arg-file)オプションを使用することもできます。これにより、stdinをPythonプログラムからパイプで自由に(communicate経由で)保存しながら、ファイル名を入力できるようになります

関連する問題