Как ввести пароль sudo при использовании subprocess.call?
Я определил функцию, которая время от времени переключает мои настройки прокси, проблема в том, что я хочу, чтобы он работал в цикле без ручного вмешательства. Но когда я запускаю программу в sudo, она вызывается в первый раз, когда программа работает без сбоев, во второй раз она запрашивает у меня пароль sudo. Вот немного кода:
def ProxySetting(Proxy):
print "ProxyStetting(Proxy)"
call("networksetup -setwebproxy 'Wi-Fi' %s" "on" % Proxy, shell = True)
call("networksetup -setsecurewebproxy 'Wi-Fi' %s" "on" % Proxy, shell = True)
call("networksetup -setftpproxy 'Wi-Fi' %s" "on" %Proxy , shell=True)
Я мог бы использовать многопоточность, но уверен, что есть способ сделать это, который не вызовет проблем. Как я могу жестко закодировать свой пароль sudo, чтобы он запускался в начале функции?
2 ответа
Здесь вы можете выполнить команду sudo без интерактивной подсказки с просьбой ввести ваш пароль:
from subprocess import call
pwd='my password'
cmd='ls'
call('echo {} | sudo -S {}'.format(pwd, cmd), shell=True)
Другой способ передачи вашего пароля в команду оболочки через python, который не включает его появление в истории команд или ps
вывод:
p = subprocess.Popen(['sudo', self.resubscribe_script], stdin=subprocess.PIPE)
p.communicate('{}\n'.format(self.sudo_password))
Обратите внимание, что с помощью communicate
разрешит вводить только один ввод в stdin; Существуют и другие способы получения многократного ввода.