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)

参考技术A 解决方法有两种:
一,升级到较高的版本,比如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

通过 shell 调用 python 时出现模块问题

从 shell 脚本运行 python 文件时出现 ModuleNotFoundError 错误

js 可以 调用powershell 脚本吗

shell脚本错误问题

IBm tws调用shell