【发布时间】:2020-07-29 14:34:12
【问题描述】:
我可以使用 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 上的应用程序。
【问题讨论】:
标签: python linux macos subprocess debian