Как обработать вызов с помощью переменной среды? - PullRequest
1 голос
/ 16 апреля 2020

Я могу использовать 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.

1 Ответ

1 голос
/ 16 апреля 2020

Поскольку вы используете Python2 .7, вы можете запустить команду подпроцесса следующим образом:

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

Что касается обновления вашей переменной $PATH env, попробуйте:

import os
os.environ["PATH"] += os.pathsep + "path/to/add"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...