Python subprocess.call 问题

Python subprocess.call issue

当我在 运行 Python 3.2.3 中 Linux 以下内容时,它什么都不做...

subprocess.call("export TZ=Australia/Adelaide", shell=True)

但是,如果我 运行 它在终端中工作...

export TZ=Australia/Adelaide

我之前使用 subprocess.call 没有遇到过问题。好像只有这一个。我是 运行 超级用户,所以这不是 sudo 的事情,我也试过在字符串前面放一个 r 以使其成为原始字符串。

有什么想法吗?谢谢

导出修改 shell 的环境。

当你运行它通过子进程时,一个新的shell被创建,环境被修改然后立即销毁。

当你在 shell 中 运行 它时,它会修改那个 shell 的环境,所以你可以看到效果。

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