子流程中的python unicode在控制台和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

在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.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)