如何使用环境变量对调用进行子处理?
How to subprocess call with environment variable?
我可以使用 subprocess
来列出文件,例如:
import subprocess
subprocess.call('ls')
但是如果我更改命令以显示 $PATH
环境变量的内容:
subprocess.call('echo $PATH')
Traceback (most recent call last):
File "/Users/user/Downloads/pyhton/main.py", line 8, in <module>
subprocess.call(['echo $PATH'])
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 172, in call
return Popen(*popenargs, **kwargs).wait()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 394, in __init__
errread, errwrite)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1047, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
[Finished in 0.1s with exit code 1]
[shell_cmd: python -u "/Users/user/Downloads/pyhton/main.py"]
[dir: /Users/user/Downloads/pyhton]
[path: /opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/usr/local/share/dotnet:/opt/X11/bin:~/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/opt/local/bin:/opt/local/sbin]
也尝试过:
subprocess.call(['echo', '$PATH'])
只打印 $PATH
,而不是它的内容。
1) 正确的做法是什么?
2) 我可以向 $PATH
添加一些路径,然后通过执行以下操作调用该路径上的应用程序:
subprocess.call(['PATH=$PATH:/usr/app_path', 'app'])
或者有更聪明的方法来做这样的事情?我的意思是调用不在 PATH 上的应用程序。
由于您正在使用 Python2.7,您可以 运行 子进程命令如下:
res = subprocess.check_output('echo $PATH', shell=True)
print(res)
关于更新您的 $PATH
环境变量,尝试:
import os
os.environ["PATH"] += os.pathsep + "path/to/add"
我可以使用 subprocess
来列出文件,例如:
import subprocess
subprocess.call('ls')
但是如果我更改命令以显示 $PATH
环境变量的内容:
subprocess.call('echo $PATH')
Traceback (most recent call last):
File "/Users/user/Downloads/pyhton/main.py", line 8, in <module>
subprocess.call(['echo $PATH'])
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 172, in call
return Popen(*popenargs, **kwargs).wait()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 394, in __init__
errread, errwrite)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1047, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
[Finished in 0.1s with exit code 1]
[shell_cmd: python -u "/Users/user/Downloads/pyhton/main.py"]
[dir: /Users/user/Downloads/pyhton]
[path: /opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/usr/local/share/dotnet:/opt/X11/bin:~/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/opt/local/bin:/opt/local/sbin]
也尝试过:
subprocess.call(['echo', '$PATH'])
只打印 $PATH
,而不是它的内容。
1) 正确的做法是什么?
2) 我可以向 $PATH
添加一些路径,然后通过执行以下操作调用该路径上的应用程序:
subprocess.call(['PATH=$PATH:/usr/app_path', 'app'])
或者有更聪明的方法来做这样的事情?我的意思是调用不在 PATH 上的应用程序。
由于您正在使用 Python2.7,您可以 运行 子进程命令如下:
res = subprocess.check_output('echo $PATH', shell=True)
print(res)
关于更新您的 $PATH
环境变量,尝试:
import os
os.environ["PATH"] += os.pathsep + "path/to/add"