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ください。上記のコードでは、そのオブジェクトを名前にバインドして、次のようにします。stdoutsubprocess.Popen()pp.stdinp.stdout
msvcrt.setmode(p.stdin.fileno(), os.O_BINARY)
msvcrt.setmode(p.stdout.fileno(), os.O_BINARY)
これが役立つことを願っています。