Повторно используя один экземпляр subprocess.Popen в Python - PullRequest
3 голосов
/ 18 января 2012

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

1 Ответ

0 голосов
/ 18 января 2012

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

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

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

...