笔者使用的python解释器版为
python3.7
,pycharm版本为pycharm2018.3
如无特殊说明,代码均在此环境执行
几条假设
-
√ 1.
项目编码
会影响程序运行控制台
和python控制台
,不影响本地系统终端
-
√ 2.
项目编码
会影响运行控制台
的标准输出编码
和控制台编码
-
√ 3.
项目编码
会影响python控制台
的标准输出编码
,不影响控制台编码
-
?4.
Editplus
中修改sys.out.encoding
会同时影响标准输出编码
和控制台编码
-
√ 5.
python
和ipython
内核一致,只是终端交互方式不同 -
√ 6. 从命令行窗口切入python或者ipython后,编码统一为utf-8,与命令行窗口隔离
-
√ 7. 在
python
或者ipython
终端修改标准输出编码sys.out.encoding
1-2次之后,
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
修改1次,运行终端和Terminal命令行终端
正常,python控制台会延迟到下一个命令输出,
修改2次,直接报错,无法输出
ValueError: I/O operation on closed file.
可以改用
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8', line_buffering=True)
或者省略参数line_buffering
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8')
-
√ 8. 在
python控制台
使用os.system(‘python xx.py’)
执行python文件等同于在命令行执行‘python xx.py’
ipython
控制台使用%run
执行python文件等同于在ipython中嵌入python语句
-
√ 9. 在
python
控制台执行文件—os.system(‘python xx.py’)
时,等同于将输出结果作为print的参数,标准输出编码为python默认编码UTF-8
在python控制台执行系统命令(如dir
ehco
等),分两种情况
(1)在从Terminal切入python控制台
执行,等同于将输出结果作为print的参数,标准输出编码为python默认编码UTF-8
(2)在从Pycharm进入python console