2015-12-01 4 views
0

Мне нужно открыть терминал, используя sudo из python. Рассмотрим мой пароль pass, и мне нужно запустить команду в скрипте, который является sudo critical-stack-intel pull.открытый терминал с sudo python

Я следующий небольшой фрагмент кода:

import subprocess 
import shlex 

command = "sudo critical-stack-intel pull" 
popen = subprocess.Popen(shlex.split(command),stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
popen.communicate("pass") 
popen.wait() 
# print help(p) 

Если я запустить файл как python myfile.py, он просит меня пароль в терминале. Это не то, чего я хочу. Я хочу, чтобы python обрабатывал пароль, который я дал, и запускал нормально. Как мне это сделать?

EDIT

Использование popen.communicate(pass + "\n") вместе с sudo -S сделал то, что я желал.

+0

'sudo' открывает tty, он не использует stdin по умолчанию. Используйте 'sudo -S' вместо –

+0

Посмотрите на это: http://stackoverflow.com/questions/567542/running-a-command-as-a-super-user-from-a-python-script – nablahero

+0

Я хочу использовать 'subprocess.Popen' не' os.Popen'. – Pant

ответ

2

Вы можете использовать опцию -Ssudo для передачи пароля через stdin. Скорее всего, тем не менее, это лучшая идея разрешить sudo доступ к critical-stack-intel без пароля, используя /etc/sudoers.

+1

Исправление этого в '/ etc/sudoers' кажется правильным. Проверьте [command aliasses] (https://help.ubuntu.com/community/Sudoers#Command_Aliases) – Joost

+0

Я использовал '-S' в моей команде вместе с' popen.communicate (pass) ', но не завершил сессию. – Pant

+0

@SarvagyaPant: IIRC 'общаться()' не закрывает stdin. Вам необходимо отправить символ новой строки вместе с вашим паролем. –

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