2017-08-21 15 views
1

私はUTF-8とcp866プロセス出力を印刷しようとしています。cp866にエンコードを正しく変更するにはどうすればよいですか?

私のコード:この後

if "sendcmd " in message.text: 
    command = message.text.replace("sendcmd ", "") 
    process = os.popen(command) 
    answer = process.read() 
    #print(answer.decode('utf-8').encode('cp866')) 
    by = bytes(answer, 'utf-8') 
    print(type(by)) 
    print(repr(by)) 
    process.close() 

私がすることを得る:(=

<class 'bytes'> 
b'b\'\\xe2\\x80\\x9c\\xd0\\xb1\\xd0\\x87\\xd2\\x90\\xd0\\xb5: \\xd0\\x8b\\xd0\\xb2\\xd0\\x87\\xd0\\xb0\\xc2\\xa0\\xd1\\x9e\\xc2\\xab\\xd2\\x90\\xc2\\xad \\xd0\\xb1\\xd0\\x81\\xd0\\x88\\xc2\\xad\\xc2\\xa0\\xc2\\xab \\xc2\\xa7\\xc2\\xa0\\xd1\\x9e\\xd2\\x90\\xd0\\xb0\\xd0\\xb8\\xd2\\x90\\xc2\\xad\\xd0\\x81\\xd0\\xbf \\xd0\\x87\\xd0\\xb0\\xc2\\xae\\xd0\\xb6\\xd2\\x90\\xd0\\xb1\\xd0\\xb1\\xd0\\xb3 "whatever.exe" \\xd0\\xb1 \\xd0\\x81\\xc2\\xa4\\xd2\\x90\\xc2\\xad\\xd0\\xb2\\xd0\\x81\\xd0\\xb4\\xd0\\x81\\xd0\\x84\\xc2\\xa0\\xd0\\xb2\\xc2\\xae\\xd0\\xb0\\xc2\\xae\\xc2\\xac 3720.\\n\' 

は私がCP866にエンコーディングを変更する必要があることを理解し、私はそれを実装する方法を理解していません

アップデート:このコードは役に立ちませんでした:

uni = type(by), repr(by) 
print(uni.encode('ascii', 'ignore')) 
+0

wjandrea、ありがとうございます! –

答えて

1

os.popenreadメソッドがstrを返した場合、プロセスの出力は自動的にデコードされます。 subprocess.Popenos.popenに似ており、カスタマイズすることができます。それは生bytes代わりstrテキストを返します。

from subprocess import Popen, PIPE 

if "sendcmd " in message.text: 
    ... 
    process = Popen(command, stdout=PIPE) 
    answer = process.communicate()[0]   # (stdout, stderr) 
    print(answer.decode('cp866')) 

は内部的には、os.popensubprocessモジュールを使用して、あなたは少しcommand引数を変更する必要があります。 Popendocumentationを確認してください。

+0

ありがとうございます。あなたの迅速で正確な答えです! –

+0

@InsendioFXあなたは歓迎です:) – direprobs

関連する問題