当我在Linux中运行Python 3.2.3中的以下内容时,它什么也没做......
subprocess.call("export TZ=Australia/Adelaide", shell=True)
但是,如果我在终端中运行它,它可以工作......
export TZ=Australia/Adelaide
之前我没有遇到过使用subprocess.call的问题。就好像是这个。我是以超级用户身份运行所以它不是sudo的东西,而且我也尝试在字符串前放一个r来使它成为一个原始字符串。
有什么想法吗?感谢。
答案 0 :(得分:3)
导出会修改shell的环境。
当您通过子流程运行时,会创建一个新shell,修改环境然后立即销毁。
当你在shell中运行它时,它会修改该shell的环境,以便你可以看到效果。
答案 1 :(得分:1)
A subprocess (shell in this case) can't(normally)modify its parent environment.
在Python中设置脚本及其子节点的本地时区(在Unix上):
#!/usr/bin/env python3
import os
import time
from datetime import datetime, timezone
os.environ['TZ'] = 'Australia/Adelaide'
time.tzset()
print(datetime.now(timezone.utc).astimezone())
# -> 2015-09-25 05:02:52.784404+09:30
如果要修改单个命令的环境,则可以传递env
参数:
#!/usr/bin/env python
import os
import subprocess
subprocess.check_call('date', env=dict(os.environ, TZ='Australia/Adelaide'))
# -> Fri Sep 25 05:02:34 ACST 2015