python 3 subprocess error in bytes

懵懂的女人 提交于 2019-12-06 03:29:30

问题


Very good, I have a little problem with the output of the thread, I get in unicode or I think and not let me convert it to utf-8, this is the code:

import subprocess,sys,time

string = b'dir'
process = subprocess.Popen('cmd.exe', shell=True,cwd="C:\\",stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=None)
process.stdin.write(string)
o,e=process.communicate()
process.wait()
process.stdin.close()
print (o.encode('utf-8'))

I jump the following error:

**Traceback (most recent call last):
  File "C:\Documents and Settings\francisco\Escritorio\k.py", line 12, in <module>
    print (o.encode(utf-8))
AttributeError: 'bytes' object has no attribute 'encode'**

if I print leaving the print and if you let me:

print(o)

but it prints the following:

**b'Microsoft Windows XP [Versi\xa2n 5.1.2600]\r\n(C) Copyright 1985-2001 Microsoft Corp.\r\n\r\nC:\\>\xa8M\xa0s? '**

and if I change these two lines:

string = bytes('dir',encoding="utf-8") 
print (n[0].decode("latin"))

I print only part of the output

that fails?


I've solved this way:

process.stdin.write("dir\n".encode())
o,e=process.communicate()
print (o.decode("utf-8"))

but I get error:

Traceback (most recent call last): File "C:\Documents and Settings\francisco\Escritorio\k.py", line 6, in print (o.decode("utf-8")) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa3 in position 103: invalid start byte

I just print it like this:

print (o.decode("latin"))

in latin, I can correct this error and print it in utf-8?


回答1:


o, the first return value from proc.communicate(), is already bytes not str, so it is already encoded in some encoding (or you could think of it as just a sequence of bytes).

In Python3 bytes can be decoded to str, and str can be encoded to bytes, but bytes can never be encoded, and str can never be decoded. That is why Python3 is complaining,

AttributeError: 'bytes' object has no attribute 'encode'


来源:https://stackoverflow.com/questions/16750561/python-3-subprocess-error-in-bytes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!