私は、サブプロセスを介して文字列として渡されるコマンドを実行しようとしています.Popen呼び出し、私はほとんどのプラットフォームとPython 3/2に依存しない方法でそれを行う方法を知りたい方法。次に例を示します。Python 2/3 subprocess.Popenと非ASCII文字
# content of test.py
import subprocess
with open('test.cmd', 'rb') as f:
cmd = f.read().decode('UTF-8')
print(cmd)
pro = subprocess.Popen('bash',
stderr=subprocess.PIPE,
stdout=subprocess.PIPE,
stdin=subprocess.PIPE)
out, err = pro.communicate(cmd)
pro.wait()
print(out)
print(err)
私はここに、ファイルからそれを読み取ることによって、非ASCII文字と文字列の通過をエミュレートしていtest.cmdのファイルの内容は次のとおりです。
echo АБВГ
文字列読み込みが良好で、print(cmd)文の出力が正しい。どのように私は関数を通信するcmdを渡すしようとすると、それは失敗します。 Python 2では、 'ascii'コーデックで文字をエンコードできないので、strからunicodeに変換しようとしているようで、strにlatin1文字しかないと思います。 strオブジェクトを正しい方法でエンコードするにはどうすればよいですか? Python 3では、communications関数はバイトを入力としますが、どのエンコーディングを使うべきですか?パイソン2では
cmdをutf-8にデコードしないと、どうなりますか? – languitar
私はそれを読んだ後にcmdをデコードしないと、実際には動作しますが、デフォルトのコンソールエンコーディングとしてUTF-8を使用するOSでのみ動作します。しかし、私は状況を正確に示すためにコマンドを読んでそれをデコードしています。実際、私はPython 2と3の両方でstrオブジェクトとしてコマンドを取得しています。私はその正確なケースでそれを行う方法を探したかったのです。 – user2102508