我正在尝试通过Fabric更改我的远程服务器的时区,如下所示:
run("export TZ=\":Pacific/Auckland\"") run("date")
这似乎不起作用。 run("date")
给了我:
Tue Apr 19 00:19:58 CDT 2011 这不是我刚刚设定的时区。
如果我只是登录服务器并运行相同的bash命令,那么一切都和预期的一样:
[lazo@lazoweb]$ date Tue Apr 19 00:20:00 CDT 2011 [lazo@lazoweb]$ export TZ=":Pacific/Auckland" [lazo@lazoweb]$ date Tue Apr 19 17:20:20 NZST 2011
有人可以对此有所了解吗?我错过了什么?
答案 0 :(得分:4)
run("export TZ=\":Pacific/Auckland\"")
run("date")
就像
/bin/sh -c 'export TZ=":Pacific/Auckland"'
/bin/sh -c 'date'
您正在启动一个shell,设置其中一个环境变量,然后退出它。它从来没有机会将环境变量传递给任何人。
在脚本环境中设置TZ,然后运行date
。我不懂Python,但似乎是
os.environ['TZ'] = ":Pacific/Auckland"
run("date")
答案 1 :(得分:2)
由于ikegami解释环境的原因,两个单独的命令将不起作用。但是,您可以实现您的目标:
run("TZ=':Pacific/Auckland' date")
答案 2 :(得分:1)
这仅适用于当前的shell。关闭shell,启动一个新shell并键入date
,您将看到TZ已重置为默认时区。即使对于Fabric,如果你捕获输出,你会看到TimeZone确实设置正确,但是当脚本结束时,shell也是如此,因此TZ变量不再可用。