【问题标题】:How to subprocess call with environment variable?如何使用环境变量子处理调用?
【发布时间】: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


    【解决方案1】:

    由于你使用的是Python2.7,所以可以运行subprocess命令如下:

    res = subprocess.check_output('echo $PATH', shell=True)
    print(res)
    

    关于更新您的 $PATH 环境变量,请尝试:

    import os
    os.environ["PATH"] += os.pathsep + "path/to/add"
    

    【讨论】:

    • 得到AttributeError: 'module' object has no attribute 'run'
    • 是的,我有import subprocess。在 macOS 上使用 Python 2.7 时,我不断收到该错误。
    • @KcFnMi 哦,python2.7。不知道人们还在使用它:)。稍后我会更新我的解决方案..
    • 好吧,看起来 2.7 是 macOS 和(如果我没记错的话)Debian 10 上的默认值。如果他们保持这种方式,我应该更改)
    • @KcFnMi 请立即尝试 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 2017-07-05
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    相关资源
    最近更新 更多