Fabric,无法在django上获取默认语言环境

时间:2012-08-28 16:48:53

标签: python django locale fabric

我有以下django管理命令:

fabrictest.py

from django.core.management.base import NoArgsCommand
import locale

class Command(NoArgsCommand):

    def handle_noargs(self, **options):
        print locale.getdefaultlocale()

我可以在本地运行:

$ /home/user/env/bin/python manage.py fabrictest
('en_US', 'UTF-8')

但是,当我使用以下结构任务远程运行命令时

@task
def test():
    # run manage.py using the python bin from the virtualenv

    with cd(env.project_root):
        run("/home/user/env/bin/python manage.py fabrictest")

我得到以下输出

[server] Executing task 'test'
[server] run: /home/user/env/bin/python manage.py fabrictest
[server] out: (None, None)

为什么我会(None, None)而不是('en_US', 'UTF-8')?这会在创建超级用户时为其他一些管理scritps(即syncdb)生成错误。

2 个答案:

答案 0 :(得分:0)

看看this question看来这些是环境变量。

您可以在run()或前缀()上下文管理器中手动导出它们。您也可以尝试在run()中将pty设置为False。

答案 1 :(得分:0)

来自the docs

  

根据POSIX,一个没有调用setlocale的程序(LC_ALL,   “”)使用便携式“C”语言环境运行。调用setlocale(LC_ALL,“”)   让它使用LANG变量定义的默认语言环境。以来   我们不希望干扰我们当前的语言环境设置   以上述方式模仿行为......

     

...如果值不能,则代码和编码可以为None           确定。

如果您的程序无法使用'C'区域设置运行,请调用setlocale()和/或设置适当的环境变量,例如LANG