Closed ghost closed 4 years ago
搜索解决了,参考讨论帖: https://www.v2ex.com/t/458543
这个问题在Windows环境出现,在Unix系的环境很少出现。
os.popen 相当于 subprocess.Popen + io.TextIOWrapper,而io.TextIOWrapper 默认使用的编码是 locale.getpreferredencoding(False),本地的preferredencoding是cp936。
解决方法是先读入bytes,然后再decode。把原代码:
f = os.popen(command, mode="r")
修改为:
f = os.popen(command) textsrc = f.buffer.readlines() textsrc = [line.decode('utf8') for line in textsrc]
以上代码在windows环境能跑通,可以兼容windows系统的环境,可以在后续版本更新,供参考。
在windows下os.popen的command不能有【| grep \"lf0\"】,windows的cmd没有grep指令,command的后缀不要这个【| grep \"lf0\"】也可以。
原来写的调用非常垃圾,我也不打算更新了
在windows环境下跑main.py报错,排查发现curl.py的curl报错。
单独跑curl函数,textsrc输出空列表【[]】。打印乱码:
'grep' �����ڲ����ⲿ���Ҳ���ǿ����еij��� ���������ļ���
去除os.popen传入的字符串后面的【 | grep \"lf0\"】,则可以跑,但是解码错误,报错如下:
File "E:/lab/sinsyplus/SinsyPlus-master/curl.py", line 8, in curl textsrc = f.readlines() UnicodeDecodeError: 'gbk' codec can't decode byte 0x9e in position 2277: illegal multibyte sequence
请问这个问题怎么解决呢?