Python-サブプロセス-電話のかけ方は、パイプによるコマンドはWindows?
-
20-08-2019 - |
質問
い方は、このコマンドを実行するとサブプロセス?
てみました:
proc = subprocess.Popen(
'''ECHO bosco|"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()
がん:
Traceback (most recent call last):
...
File "C:\Python24\lib\subprocess.py", line 542, in __init__
errread, errwrite)
File "C:\Python24\lib\subprocess.py", line 706, in _execute_child
startupinfo)
WindowsError: [Errno 2] The system cannot find the file specified
ものって:
- のコマンドはwindows コンソールに働きます。
- 場合を削除しま エコドン-ボスコ|部での微細 はpopen呼びます。と思う この問題に関連またはエコー |.
解決
まず第一に、あなたは実際にパイプを必要としません。あなただけの入力を送っています。あなたはそのために subprocess.communicate に使用することができます。
第二に、文字列としてコマンドを指定しないでください。それは、すぐにスペースを含むファイル名が関与していると厄介です。
あなたは本当に、パイプされたコマンドを実行したい場合は、第三に、単にシェルを呼び出します。 Windowsでは、私はそれがcmd /c program name arguments | further stuff
だと考えています。
最後に、単一のバックスラッシュは、危険なことができます:"\p"
'\\p'
ですが、新しい行が'\n'
です。 os.path.join()を使ってくださいのか<使用href = "http://docs.python.org/library/os.html#os.sep" のrel = "noreferrer"> os.sep のか、パイソン、単にスラッシュ外に指定されている場合。
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')
他のヒント
あなたが正しかった、ECHOは問題があります。シェルがなけれ= trueオプションは、ECHOコマンドが見つかりません。
これはあなたが見たエラーで失敗します:
subprocess.call(["ECHO", "Ni"])
これは渡し:Ni及び0
を印刷しますsubprocess.call(["ECHO", "Ni"], shell=True)
所属していません StackOverflow