在PyCharm上执行 那个子进程的 communicate()似乎不行呀?
Topic source是有这个问题,试了一下先用print(output):
def sp_comm():
'''子进程还需要输入,可以通过communicate()方法输入'''
print('$ nslookup')
p = subprocess.Popen(['nslookup'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err = p.communicate(b'set q=mx\npython.org\nexit\n')
print(output)
print(output.decode('utf-8'))
输出:
D:\Python37\python.exe D:/Python37/Code/mp_communicate.py
$ nslookup
Traceback (most recent call last):
File "D:/Python37/Code/mp_communicate.py", line 21, in <module>
sp_comm()
File "D:/Python37/Code/mp_communicate.py", line 14, in sp_comm
print(output.decode('utf-8'))
UnicodeDecodeError: 'utf-8' codec can't decode byte **0xc8** in position 2: invalid continuation byte
b'\xc4\xac\**xc8**\xcf\xb7\xfe\xce\xf1\xc6\xf7: UnKnown\r\nAddress: 192.168.1.1\r\n\r\n> > \xb7\xfe\xce\xf1\xc6\xf7:
Exit code: 0
问题是出现了utf-8不能解码的字节:\xc8。将出错信息拷到网上查,发现:encoding = 'gbk'就能解决问题。
GBK,又称GBK大字符集,是将所有亚洲文字的双字节字符,包括简体中文、繁体中文、日语、韩语等,都使用一种格式编码,兼容所有平台的上的语言。GBK大字符集包含的汉字数量比GB2312和BIG5多,使得汉字兼容足够使用。
最后:
def sp_comm():
'''子进程还需要输入,可以通过communicate()方法输入'''
print('$ nslookup')
p = subprocess.Popen(['nslookup'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err = p.communicate(b'set q=mx\npython.org\nexit\n')
# print(output.decode('utf-8'))
print(output.decode('gbk'))
print('Exit code:', p.returncode)
- 1
Silvers丶Rayleigh
结果
```
$ nslookup
Traceback (most recent call last):
File "F:/untitled1/hello.py", line 66, in <module>
print(output.decode('utf-8'))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 2: invalid continuation byte
```