2012-01-18 2 views
3

Я работаю над написанием процесса на Python, и в своем коде я делаю несколько вызовов в командной строке, используя p = subprocess.Popen(['example', 'command', 'and', 'args'). Недавно я столкнулся с проблемой, что для нескольких вызовов в командной строке необходимы разрешения sudo, и поэтому пользователю приходится вводить пароль sudo несколько раз, что нежелательно. Есть ли способ вызвать только один экземпляр оболочки и многократно использовать его во всей программе? Можно ли это сделать, даже если разные команды запускаются из разных классов? Спасибо!Неоднократно используя один подпроцесс. Пример экземпляра в python

+0

Вы уже знаете PolicyKit? –

+0

Вы должны сделать это, используя библиотеку paramiko. –

+0

Спасибо за подсказки. Есть ли способ сделать это без использования каких-либо внешних библиотек? Я надеялся, что будет конфигурация Popen, которая позволит мне делать то, что мне нужно. – EagerToLearn

ответ

0

Для конкретности, предположим, что ваша программа выглядит следующим образом:

import subprocess 
import shlex 
proc = subprocess.Popen(shlex.split('fdisk -l')) 
proc.communicate() 
proc = subprocess.Popen(shlex.split('fdisk -l')) 
proc.communicate() 

Запуск его как обычный пользователь не возвращает никакого вывода.

Но если вы запустите

% sudo python /path/to/test.py 

тогда вы побудил один раз пароль суперпользователя, и оба subprocess.Popen команды выполняются в качестве корня.

+0

Я пропустил это. Это трюк, спасибо большое! – EagerToLearn

Смежные вопросы