Переменная PYTHONPATH отсутствует при использовании os.execlpe для перезапуска сценария от имени пользователя rootPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Переменная PYTHONPATH отсутствует при использовании os.execlpe для перезапуска сценария от имени пользователя root

Сообщение Anonymous »

Моя конечная цель — создать сценарий, который может быть первоначально запущен непривилегированным пользователем без использования sudo, но будет запрашивать пароль sudo и автоматически повышать уровень до root. Я делал это с помощью сценария-оболочки bash, но хотел бы что-то более аккуратное, не требующее дополнительного файла.

Некоторые пользователи Google нашли этот вопрос на StackOverflow, где принятый ответ, предлагающий использовать os.execlpe для повторного запуска сценария, сохраняя ту же среду. Я попробовал, но при втором запуске сразу не удалось импортировать невстроенный модуль.

Расследование показало, что переменная PYTHONPATH не переносится, хотя почти все остальные переменные среды (также отсутствуют PERL5LIB и несколько других, но я их не использую, поэтому они меня не беспокоят).

У меня есть небольшой тестовый скрипт, демонстрирующий проблему:

Код: Выделить всё

#!/usr/bin/env python
import os
import sys

print(len(os.environ['PYTHONPATH']))

euid = os.geteuid()
if euid != 0:
print("Script not started as root. Running with sudo.")
args = ['sudo', sys,executable] + sys.argv + [os.environ]
os.execlpe('sudo', *args)

print("Success")
Ожидаемый результат:

Код: Выделить всё

6548
Script not started as root. Running with sudo.
[sudo] password for esker:
6548
Success
Но вместо этого я получаю ошибку KeyError:

Код: Выделить всё

6548
Script not started as root. Running with sudo.
[sudo] password for esker:
Traceback (most recent call last):
File "/usr/home/esker/execlpe_test.py", line 5, in 
print(len(os.environ['PYTHONPATH']))
File "/vol/apps/python/2.7.6/lib/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError(key)
KeyError: 'PYTHONPATH'
Какова причина отсутствия этой переменной и как избежать ее исчезновения? Альтернативно, есть ли лучший способ сделать это, который не приведет к возникновению проблемы?

Подробнее здесь: https://stackoverflow.com/questions/445 ... pt-as-root
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»