2017-07-28 2 views
1

Ich kann keine geeignete Lösung für den folgenden Fall finden. Also, im Grunde möchte ich zwei Shell-Befehle pipen und einige Eingabedaten (mypassword hier) an die zweite übergeben. Hier einige Code demonstriert das Problem:Pass Eingang zu Popen Prozess

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) 

Wenn er gestartet wird es in der Konsole fragt: Enter pass phrase: und hält trotz der Tatsache, dass ich die Passphrase bin vorbei bereits (mein mypassword Eingang).

Wo ist meine Schuld und wie repariere ich sie?

Antwort

2

Ihre stdin xargs ist die Ausgabe von find, können Sie nicht auch Eingabe etwas anderes.

Eine Option wäre, das Ergebnis von find in eine Datei zu schreiben und die Option -a (--arg-file) von xargs zu verwenden. Auf diese Weise können Sie Dateinamen eingeben, während Sie weiterhin stdin frei haben, um von Ihrem Python-Programm (über communicate)

weitergeleitet zu werden