/ bin / sh - неинтерактивное использование из Python - PullRequest
1 голос
/ 12 июня 2011

Я вызываю cmd из Python так:

subpocess.Popen(['coffee'], shell=True)

который я верю переводится на:

/bin/sh -c "coffee"

Из документации я прочитал, что в неинтерактивном режиме файлы, такие как / etc / profile, /etc/bash.bashrc не читаются и используется $ PATH по умолчанию (init $ PATH) Я прав? Есть ли единственный способ добавить кофе в $ PATH, это скопировать его в / usr / local / bin?

Ответы [ 2 ]

2 голосов
/ 12 июня 2011

Исторически, ни один из файлов запуска не читается для оболочек, вызываемых как неинтерактивные команды, поскольку предположительно среда уже настроена.

Python, оболочки и фактически почти все будут проходить через существующую средуили, по крайней мере, переменная окружения PATH до дочерней оболочки и, таким образом, вы уже выполнили .profile или расширение bash.(Поскольку он был запущен, когда пользователь вошел в систему, а другие процессы унаследовали измененную переменную PATH.)

Имеющиеся параметры:

  • укажите путь для всех пользователей системы в /etc/profile
  • требует от пользователя соответствующих настроек PATH (вы наследуете их)
  • запускает утилиты подпроцесса с полными путями
  • помещает все команды в каталоги, уже находящиеся в PATH
2 голосов
/ 12 июня 2011

Нет, оболочка унаследует PATH от интерпретатора Python, т.е. будет os.getenv('PATH').Кроме того, вы можете установить путь внутри команды:

subprocess.Popen(['PATH=/where/ever/bin:$PATH coffee'], shell=True)

, хотя я бы действительно посоветовал вам либо использовать полный путь к coffee, либо установить PATH перед выполнением вашей программы на Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...