shell=True
と一緒に使うべきではないと思いますsubprocess.Popen()
。
Windows 7 64 ビットを使用し、Python を Cygwin で実行して、次の簡単なテスト プログラムを作成しました。
import subprocess as sp
p = sp.Popen(['cat', 'junk.bin'], stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.
PIPE)
stdin, stdout = p.communicate()
with open('junk1.bin', "wb") as f:
f.write(stdin)
私にとってjunk1.bin
は、 のバイト単位の完全なコピーであるため、あなたに起こっている->変換junk.bin
は見られません。"\n"
"\r\n"
編集: 役に立ちそうな Web ページを見つけました:
http://blog.rubypdf.com/2009/11/03/how-to-let-python-send-binary-data-to-stdout-under-windows/
import sys
if sys.platform == "win32":
import os, msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
子プロセスが親プロセスの stdin および stdout ファイル ハンドルのバイナリ モード設定を継承する場合、Python 親プロセスで上記のコードを実行すると役立つでしょうか?
そうでない場合は、同じトリックを試してみてstdin
ください。上記のコードでは、そのオブジェクトを名前にバインドして、次のようにします。stdout
subprocess.Popen()
p
p.stdin
p.stdout
msvcrt.setmode(p.stdin.fileno(), os.O_BINARY)
msvcrt.setmode(p.stdout.fileno(), os.O_BINARY)
これが役立つことを願っています。