2
f = os.popen("gst-launch -q whateversrc ! ... ! fdsink")
f.read(1024);

GNU / Linuxで問題なく動作しますが、Windowsの各\x0aではなく\x0d\x0aになります。直し方?

私もgst-launch -q ..... ! matroskamux streamable=true ! fdsink > qqq3.mkvコンソールで試してみましたが、qqq3.mkvも文字化けしていました。gst-launch -q filesrc location=file ! fdsink > file2また、CRLFに変換します。

何をすべきか?Windows用のGstreamerビルドにはtcp{server、client}sinkがありません...

Windowsで(または特定のアプリケーションに対して)そのLF-> CRLF変換をグローバルにオフにする方法があるかもしれませんか?

4

1 に答える 1

0

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)

これが役立つことを願っています。

于 2012-04-19T01:41:28.060 に答える