私は別のプログラムをテストするためのプログラムを持っています。それはそうのようにpopenのを使用しています。Python3 Popen:毎回.encode()を使用する必要がありますか?
testProgram = subprocess.Popen(args, stdin = subprocess.PIPE, stdout = subprocess.PIPE)
はpython2では、私はそうのようtestProgram
に指示を送る:
testProgram.stdin.write("count "+vals[0]+"\n")
は、書き込みではなく、STRのバイトのようなオブジェクトを望んでいます。私は、これはすべての書き込みのためにtestProgram.stdin.write(("count "+vals[0]+"\n").encode("utf-8"))
のようなものを使用する必要があると思うが、私は明らかにそれを行うつもりはない。
Popenの標準入力をpython3のテキストストリームとして扱う簡単な方法はありますか、それともpython2に固執すべきですか?引数はuniversal_newlines = True
looks like it should workですが、私の場合、プログラムはただちにresult = testProgram.stdout.readline()
でフリーズします。
プログラム、あなたは何を入力しているとは何ですか? –
「イベントカウンター」です。私はそれが何を意味するのか本当に分かっていませんが、私はそれが何をすべきかを知っています。ファイルからAVLツリーを読み込み、さらに詳しい手順についてstdinをチェックすることになっています。スクリプトは数千命令を入力し、エントリが正しいこと、およびツリーのサイズが必要以上に大きくならないことを確認します。 – Kenkron
'universal_newlines = True'は動作するはずですので、私が考えているのは、何らかのエンコーディングの問題があるかもしれないということだけです。https://docs.python.org/3.2/library/locale.html#locale.getpreferredencoding –