子流程中的python unicode在控制台和mod_wsgi中的工作方式不同
在python控制台上,我可以运行(e acute的回声): 但如果我在Django视图(mod_wsgi)中运行该代码,它会崩溃:子流程中的python unicode在控制台和mod_wsgi中的工作方式不同,python,subprocess,Python,Subprocess,在python控制台上,我可以运行(e acute的回声): 但如果我在Django视图(mod_wsgi)中运行该代码,它会崩溃: subprocess.call(cmd,shell=True) File "/usr/lib64/python2.6/subprocess.py", line 444, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib64/python2.6/subprocess
subprocess.call(cmd,shell=True)
File "/usr/lib64/python2.6/subprocess.py", line 444, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib64/python2.6/subprocess.py", line 595, in __init__
errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1106, in _execute_child
raise child_exception
TypeError: execv() arg 2 must contain only strings
我可以通过执行.encode('ascii','replace')
来解决这个问题,但它会去除重音字符
调用子shell时,我看不到任何指定区域设置或编码的方法。我试图用lang和locale将mod_wsgi配置为utf-8,但没有帮助
如何在mod_wsgi上运行带有重音字符的子进程调用?我终于找到了一种方法:
subprocess.call(cmd.encode('utf-8'),shell=True)
子shell设置为什么语言环境?实际上,您在没有显式编码的情况下成功地使用Unicode字符串是令人惊讶的。选择显式编码,并显式设置子shell的区域设置。或者根据您正在调用的工具定制编码。我无法在调用子shell时指定区域设置或编码。我还尝试将命令转换为utf-8:问题仍然存在。我还尝试用lang和locale将mod_wsgi配置为utf-8,但没有帮助。真正的命令是什么
echo
在mod\u wsgi
中几乎没有用处。shell将从mod_wsgi控制的Python继承区域设置(LC.*
和locale
环境变量);似乎有一个错误,但我自己还没有尝试过。我犯了一个错误:我用解码代替了“utf-8”的编码,现在效果更好了。。。非常感谢
subprocess.call(cmd.encode('utf-8'),shell=True)