2011-12-13 12 views
6

に私は私のpython 3.2.2書式設定文字列()のpython 3.xの

working_file = subprocess.Popen(["/pyRoot/iAmAProgram"], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) 

working_file.stdin.write('message') 

で、このコードを実行しようとすると、私はエラーを取得し、私はそれのpython 3を理解し、問題を抱えていますそれは文字列を扱う方法を変更しましたが、私は 'メッセージ'のフォーマット方法を理解していません。誰も私はこのコードを有効にする方法を知っていますか?

多くのおかげ

JON

更新:HERESに私は

Traceback (most recent call last): 
    File "/pyRoot/goRender.py", line 18, in <module> 
    working_file.stdin.write('3') 
TypeError: 'str' does not support the buffer interface 
+0

あなたエラーメッセージを忘れました。 –

答えて

2

を取得し、エラーメッセージがエラー・メッセージ "はTypeError: 'strが' バッファインタフェースをサポートしていません" となっていますか?そのエラーメッセージは、何が間違っているかをほとんど正確に伝えます。そのsdtinに文字列オブジェクトを書き込まないでください。あなたは何を書いていますか?バッファインタフェースをサポートしているもの通常これはバイトオブジェクトです。

同様:

working_file.stdin.write(b'message') 
7

は、私が(「エラーメッセージが間違っている正確に何を説明します」の部分を除く)前の回答に同意するが、私はそれを完了したいと思います。大文字小文字の場合は、パイプに書き込む文字列(バイトオブジェクトではない)があります。

1)すべての文字列をパイプに書き込む前にまずエンコードします。

working_file.stdin.write('message'.encode('utf-8')) 

2)のエンコードを行いますバッファリングされたテキストインターフェイスにパイプをラップ:

stdin_wrapper = io.TextIOWrapper(working_file.stdin, 'utf-8') 
stdin_wrapper.write('message') 

(あなたは(stdin_wrapper.flushを呼び出す必要があるかもしれませんので、I/Oは、現在バッファリングされていることに注意してください) 。)

関連する問題