python - 如何使用环境变量子处理调用?
问题描述
我可以使用 usesubprocess
列出文件,例如:
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'])
哪个只是 print $PATH
,而不是它的内容。
1)做这件事的正确方法是什么?
2)我可以添加一些路径$PATH
,然后通过执行以下操作调用该路径上的应用程序:
subprocess.call(['PATH=$PATH:/usr/app_path', 'app'])
还是有更聪明的方法来做这样的事情?我的意思是调用不在 PATH 上的应用程序。
解决方案
由于您使用的是 Python2.7,因此您可以按如下方式运行 subprocess 命令:
res = subprocess.check_output('echo $PATH', shell=True)
print(res)
关于更新您的$PATH
环境变量,请尝试:
import os
os.environ["PATH"] += os.pathsep + "path/to/add"
推荐阅读
- javascript - Javascript 上 if else 的不同结果
- r - 分配给 R 中的 %@% 运算符的函数组合
- rust - 使用 clap 3 派生宏,我如何指定组的至少一个参数必须存在?
- reactjs - 如何在 React Dropzone Uploader 中编写自己的 POST 请求?
- c# - 模糊自定义控件的背景
- django - 单击菜单项将目录添加到 Django 中的当前 URL
- string - 如何检查 z3py 中以字符串格式给出的布尔表达式的有效性
- html - 在rails中生成一个自动递增的数字
- python - 将 pyspark 连接到 SQL Server 时出错
- php - 如何在 PHP 中将选定的选项值作为字符串获取?