Mam wiele problemów z przekazaniem ciągu znaków do narzędzia wiersza poleceń openssl za pośrednictwem podprocesu Pythona w następujący sposób:
process = subprocess.Popen(
["openssl", "rsa", "-in", pathFile, "-out", "id_rsa.out"],
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
shell=False
)
try:
process.communicate("some passphrasen", timeout=2)
except:
process.kill() #openssl stays alive otherwise.
Powyższy kod wygasa (z i bezstd przekierowanie w Popen). Mogę używać openssl normalnie przez terminal, ale naprawdę muszę być w stanie uruchomić to jako część mojego skryptu Pythona.
Każda pomoc będzie doceniona.
Odpowiedzi:
3 dla odpowiedzi № 1W sekcji PASS PHRASE ARGUMENTS on strona man openssl wyjaśnia, jak działa mechanizm wprowadzania hasła. Aby Twój przykład zadziałał, powinieneś powiedzieć openssl, aby odebrał hasło stdin
. Używając twojego przykładu jako punktu wyjścia, następujące dla mnie działa:
process = subprocess.Popen(
["openssl", "rsa", "-in", pathFile, "-out", "id_rsa.out", "-passin", "stdin"],
stdin = subprocess.PIPE,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE,
shell=False
)
process.communicate("passphrasen")