为什么我有一个 "locale error" 运行 一个从 Mac 复制的 jython 脚本?
Why do I have a "locale error" running a jython script which was copied from a Mac?
我有一个 python 框架,用于配置我们的 "virtual" 测试系统。这些测试系统 运行 一些基于 RH Linux;在每个系统上,都有一个特定的 JVM 运行.
现在我遇到了这个奇怪的问题:
- 我的 python 框架将一个小的 X.py 脚本复制到远程系统(使用 scp)
- 我的 python 框架然后使用 ssh 来触发我们特殊的 "jython" 包装器...在远程 system/JVM[的上下文中简单地加载和执行上述 X.py
如果我的框架 运行 在...上的系统是某种 Linux(Ubuntu 或 RedHat)...一切正常。
但现在我第一次 "Mac user" 使用我的框架。当他 运行 我的框架本地在他的 Mac 上时,他得到这个远程调用 jython 的错误输出:
b'Traceback (most recent call last):'
b' File "xxxjython", line 19, in <module>'
b' xxxjython.main()'
b' File "xxxjython.py", line 296, in main'
b" locale.setlocale(locale.LC_ALL, '') # Read env var to initialize locale info"
b' File "/usr/lib/python2.6/locale.py", line 513, in setlocale'
b' return _setlocale(category, locale)'
b'locale.Error: unsupported locale setting'
我们可以通过 运行 这里 fix/workaround 这个问题
echo 'export LC_ALL=en_US.UTF-8' >>/etc/bashrc
首先在远程系统上。但我仍然很困惑——为什么我需要在远程系统上导出这个文件;如果唯一的区别(与 "working" 设置相比)是系统的 OS,而我的 "master framework" 是 运行?
最后我发现这与"locales"如何与远程系统协同工作有关。有关更多信息,请参见 here.
我的解决方案是设置
os.environ["LC_ALL"] = "C"
在我的框架内。这 "overrides" 所有语言环境设置;它从 python 流入我的 ssh 调用到远程 jython 调用。
我有一个 python 框架,用于配置我们的 "virtual" 测试系统。这些测试系统 运行 一些基于 RH Linux;在每个系统上,都有一个特定的 JVM 运行.
现在我遇到了这个奇怪的问题:
- 我的 python 框架将一个小的 X.py 脚本复制到远程系统(使用 scp)
- 我的 python 框架然后使用 ssh 来触发我们特殊的 "jython" 包装器...在远程 system/JVM[的上下文中简单地加载和执行上述 X.py
如果我的框架 运行 在...上的系统是某种 Linux(Ubuntu 或 RedHat)...一切正常。
但现在我第一次 "Mac user" 使用我的框架。当他 运行 我的框架本地在他的 Mac 上时,他得到这个远程调用 jython 的错误输出:
b'Traceback (most recent call last):'
b' File "xxxjython", line 19, in <module>'
b' xxxjython.main()'
b' File "xxxjython.py", line 296, in main'
b" locale.setlocale(locale.LC_ALL, '') # Read env var to initialize locale info"
b' File "/usr/lib/python2.6/locale.py", line 513, in setlocale'
b' return _setlocale(category, locale)'
b'locale.Error: unsupported locale setting'
我们可以通过 运行 这里 fix/workaround 这个问题
echo 'export LC_ALL=en_US.UTF-8' >>/etc/bashrc
首先在远程系统上。但我仍然很困惑——为什么我需要在远程系统上导出这个文件;如果唯一的区别(与 "working" 设置相比)是系统的 OS,而我的 "master framework" 是 运行?
最后我发现这与"locales"如何与远程系统协同工作有关。有关更多信息,请参见 here.
我的解决方案是设置
os.environ["LC_ALL"] = "C"
在我的框架内。这 "overrides" 所有语言环境设置;它从 python 流入我的 ssh 调用到远程 jython 调用。