Python subprocess.call问题

时间:2015-09-24 05:11:16

标签: python linux subprocess call

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

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

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

export TZ=Australia/Adelaide

之前我没有遇到过使用subprocess.call的问题。就好像是这个。我是以超级用户身份运行所以它不是sudo的东西,而且我也尝试在字符串前放一个r来使它成为一个原始字符串。

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:3)

导出会修改shell的环境。

当您通过子流程运行时,会创建一个新shell,修改环境然后立即销毁。

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

答案 1 :(得分:1)

A subprocess (shell in this case) can'tnormallymodify 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