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
当我在 运行 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