Reputation: 248
When I run the following in Python 3.2.3 in Linux it does nothing...
subprocess.call("export TZ=Australia/Adelaide", shell=True)
However if I run it in the terminal it works...
export TZ=Australia/Adelaide
I haven't had an issue with using subprocess.call before. Just seems to be this one. I'm running as a superuser so it's not a sudo thing, and I've also tried putting an r in front of the string to make it a raw string.
Any ideas? Thanks.
Upvotes: 0
Views: 421
Reputation: 414079
A subprocess (shell in this case) can't (normally) modify its parent environment.
To set the local timezone for the script and its children in Python (on 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
If you want to modify the environment for a single command then you could pass env
parameter:
#!/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
Upvotes: 1
Reputation: 2766
Export modifies the environment of the shell.
When you run it through subprocess, a new shell is created, the environment modified and then immediately destroyed.
When you run it in a shell, it modifies the environment of that shell so you can see the effect.
Upvotes: 3