0

我有以下 django 管理命令:

织物测试.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')?这会为其他一些管理脚本生成错误(即,syncdb在创建超级用户时)。

4

2 回答 2

0

看看这个问题,似乎那些是拾取的环境变量。

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

于 2012-08-28T18:06:56.703 回答
0

文档

根据 POSIX,未调用 setlocale(LC_ALL, "") 的程序使用可移植的“C”语言环境运行。调用 setlocale(LC_ALL, "") 让它使用 LANG 变量定义的默认语言环境。由于我们不想干扰当前的语言环境设置,因此我们以上述方式模拟行为......

...代码和编码可以是 None 以防无法确定值。

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

于 2012-08-28T22:03:25.040 回答