1

コマンドを utf-8 エンコーディングで標準入力に送信して、プログラムを制御する必要があります。このために、次を使用してプログラムを実行しsubprocess.Popen()ます。

proc = Popen("myexecutable.exe", shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
proc.stdin.write(u'ééé'.encode('utf_8'))

これを cygwin utf-8 コンソールから実行すると、動作します。Windows コンソール (encoding ='cp1252') から実行すると、これは機能しません。実行したい各コンピューターにcygwin utf-8コンソールをインストールせずにこれを機能させる方法はありますか? (注: コンソールに何も出力する必要はありません)

4

2 に答える 2

0

サブプロセスのドキュメントからのこの警告が関連しているかどうか疑問に思います:

Windowsでshell=Trueを指定する必要がある唯一の理由は、実行したいコマンドが実際にシェルに組み込まれている場合です(dir、copyなど)。バッチファイルを実行したり、コンソールベースの実行可能ファイルを実行したりするためにshell=Trueは必要ありません。

于 2009-11-26T13:41:10.633 に答える
0

なぜutf-8パイプを強制する必要があるのですか? 次のようなことはできませんでしたか

import sys
current_encoding = sys.stdout.encoding
...
proc.stdin.write(u'ééé'.encode(current_encoding))

編集:質問を編集する前に、この回答を書きました。これはあなたが探しているものではないと思いますよね?

于 2009-11-26T13:57:12.710 に答える