shell脚本调用python处理中文错误的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本调用python处理中文错误的问题相关的知识,希望对你有一定的参考价值。
我有个python文件, 里面会处理一个带utf8编码的中文文本,在文件头用# -*- coding: utf-8 -*-指定了文件编码。
单独运行python脚本成功
但是当写了一个shell脚本其中调用这个python脚本时,却失败,错误信息:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 16-26: ordinal not in range(128)
一,升级到较高的版本,比如3.1.2或者以上
第二,在python安装的目录找到site.py文件(Python2x\Lib\),修改def setencoding()方法,把
def setencoding():
"""Set the string encoding used by the Unicode implementation. The default is 'ascii', but if you're willing to experiment, you can change this.""" encoding = "ascii" # Default value set by _PyUnicode_Init() if 0: # Enable to support locale aware default string encodings. import locale loc = locale.getdefaultlocale() if loc[1]: encoding = loc[1]
....
把if 0,改为if 1
参考资料:http://blog.sina.com.cn/s/blog_954ef2920100ue5i.html
参考技术B 1.在shell里面写上编码方案2.把utf-8 改成 gbk,据说win上对中文的支持以gbk为好。
3.如果还不行,整个错误的提示都贴出来 参考技术C 恐怕是shell传给脚本运行的参数,导致过程中遇到的信息处理错误 参考技术D 请在shell脚本中加上环境变量LANG的配置
使用 Git Bash 从 Shell 脚本调用批处理脚本
【中文标题】使用 Git Bash 从 Shell 脚本调用批处理脚本【英文标题】:Call Batch Script from Shell Script using Git Bash 【发布时间】:2015-05-17 03:30:53 【问题描述】:我有一个批处理脚本(master.bat),它调用了许多批处理脚本。 Master.bat:
call a.bat
call b.bat
call c.bat
调用这个批处理脚本的shell脚本(call_master.sh)是:
echo $PATH
cmd /c master.bat
我正在使用 Git Bash 在 Windows-7 上调用这个 shell 脚本。 当我运行 shell 脚本时,我没有收到任何错误,但是 master.bat 没有调用任何脚本。 应该怎么做才能正确地做到这一点
【问题讨论】:
【参考方案1】:在 /c 开关中 double the slash 可能会有所帮助,因此它不会被 shell 解释为 C: 驱动。
我做了一个小测试,这是命令和输出:
$ cmd //c master.bat
> call a.bat
> echo hello from a
hello from a
> call b.bat
> echo hello from b
hello from b
> call c.bat
> echo hello from c
hello from c
这是来自 Mingw wiki 关于path conversion 的另一个参考。
【讨论】:
有没有办法在新窗口中运行这个批处理?我的意思是,不知何故,让它从 Git Bash shell 流中分离出来独立评估。 找到了答案,很简单:start file.bat
以上是关于shell脚本调用python处理中文错误的问题的主要内容,如果未能解决你的问题,请参考以下文章
shell 获得调用的python脚本的print值和错误log