返回信息流python小白一枚,大神们,请收下我的膝盖!
楼主的脚本是这样的:
import os
com = "ping www.baidu.com"
os.system(com);
-------------------
运行环境是:win7 + spyder + Python2.7
——————————
运行出现的问题:'utf-8' codec can't decode byte ......
T^T
——————————
开始我的解决思路是这样的:
###
1.我在cmd上运行了ping www.baidu.com,的确会出现中文字符,所以我把脚步改成:
os.system(com).decode('gbk')
或者os.system(com).decode('gbk').decode('utf-8')
这时候又出现:'int' object has no attribute 'decode',我又看看cmd的运行效果,嗯,的确有数字
所以我又google一下,又在脚本里加了这样的一段话:
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
然并卵!!!
###
2.那我我把CMD里面的字体改成为UTF-8的设置,总行了吧?!!!
然后运行情况自动回到###1
###
3.那么有没有肯可能我找的编码方式不对呢?但是我在###2中已经把编码方式改过来了呀?!
请问大家之前遇到这种情况是如何处理?不要跟我说换到Liunx下执行,问题就解决这样没有营养的话。楼主很想知道这个问题的真正原因
现在此谢过
这是一条镜像帖。来源:北邮人论坛 / python / #10217同步于 2015/12/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
[问题]unicode啥的编码问题
yuankaiqi
2015/12/3镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
根本不是编码问题
os.system的返回值是int
https://docs.python.org/2/library/os.html#os.system
如果你要获得命令行执行结果,可以用os.popen或者subprocess
ls正解,
--------
“
###
1.我在cmd上运行了ping www.baidu.com,的确会出现中文字符,所以我把脚步改成:
os.system(com).decode('gbk')
或者os.system(com).decode('gbk').decode('utf-8')
”
--------
你这样decode了半天,操作的是os.system()的返回值而没有操作输出。
可以尝试subprocess和shlex,其中subprocess是得到输出和异常或者错误信息的,shlex是格式化命令行指令的。
得到ping输出了再去操作编码。
是的,这个我知道,但是就会出现我说的问题啊
而且,既然是int,为什么还是没法输出呢?
【 在 Chon 的大作中提到: 】
: 根本不是编码问题
: os.system的返回值是int
: https://docs.python.org/2/library/os.html#os.system
: ...................
你要获得输出就不要用os.system
【 在 yuankaiqi 的大作中提到: 】
: 是的,这个我知道,但是就会出现我说的问题啊
: 而且,既然是int,为什么还是没法输出呢?
:
我觉得
import os
com = "ping www.baidu.com"
os.system(com)
os.system 直接调用的 c system,输入输出不会经过 python
这三句话不会出现 'utf-8' codec can't decode byte
你出 'utf-8' codec can't decode byte 错误,难道栈都没有?有你不给出来?
2楼正解,我在ubuntu上也的确没有问题。
但是,使用os.system(com)的栈显示如下:
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\baseshell.py", line 275, in write_output
self.shell.write(self.get_stdout(), flush=True)
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\baseshell.py", line 265, in get_stdout
return self.transcode(qba)
File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\baseshell.py", line 258, in transcode
return to_text_string(qba.data(), 'utf8')
File "C:\Python27\lib\site-packages\spyderlib\py3compat.py", line 134, in to_text_string
return unicode(obj, encoding)
File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xbb in position 202: invalid start byte
---------
想知道原因
【 在 yuankaiqi 的大作中提到: 】
: python小白一枚,大神们,请收下我的膝盖!
: 楼主的脚本是这样的:
: import os
: ...................
windows10 64bit python3.5 还是正常
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import os
>>> os.system("ping www.google.com")
0
>>>