Прежде всего, вам на самом деле не нужна труба; Вы просто отправляете ввод. Для этого вы можете использовать subprocess.communicate .
Во-вторых, не указывайте команду в виде строки; это грязно, как только имена файлов с пробелами.
В-третьих, если вы действительно хотите выполнить конвейерную команду, просто вызовите оболочку. В Windows я считаю, что это cmd /c program name arguments | further stuff
.
Наконец, одиночные косые черты могут быть опасны: "\p"
- это '\\p'
, но '\n'
- это новая строка. Используйте os.path.join () или os.sep или, если указано вне python, просто косую черту.
proc = subprocess.Popen(
['C:/Program Files/GNU/GnuPG/gpg.exe',
'--batch', '--passphrase-fd', '0',
'--output ', 'c:/docume~1/usi/locals~1/temp/tmptlbxka.txt',
'--decrypt', 'test.txt.gpg',],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
stdout_value, stderr_value = proc.communicate('bosco')