Заставить Python вводить пароль при запуске сценария csh

StackOverflow https://stackoverflow.com/questions/230845

Вопрос

Я пишу сценарий Python, который выполняет сценарий csh в Solaris 10.Сценарий csh запрашивает у пользователя пароль root (который я знаю), но я не уверен, как заставить сценарий Python ответить на запрос паролем.Это возможно?Вот что я использую для выполнения сценария csh:

import commands

commands.getoutput('server stop')
Это было полезно?

Решение

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

Да, и помните, что жестко закодированный пароль пользователя root в скрипте оболочки или Python потенциально является дырой в безопасности: D

Другие советы

Использовать подпроцесс.Вызовите Popen(), чтобы создать свой процесс, и используйте communication(), чтобы отправить ему текст.Извините, забыл включить ТРУБУ..

from subprocess import Popen, PIPE

proc = Popen(['server', 'stop'], stdin=PIPE)

proc.communicate('password')

Вам лучше избегать пароля и попробовать такую ​​схему, как sudo и sudoers.Pexpect, упомянутый в другом месте, не является частью стандартной библиотеки.

import pexpect
child = pexpect.spawn('server stop')
child.expect_exact('Password:')

child.sendline('password')

print "Stopping the servers..."

index = child.expect_exact(['Server processes successfully stopped.', 'Server is not running...'], 60)
child.expect(pexpect.EOF)

Сделал трюк! Pexpect правила!

Добавьте input = в proc.communicate () для тех, кто любит использовать стандартную библиотеку lib.

from subprocess import Popen, PIPE
proc = Popen(['server', 'stop'], stdin=PIPE)
proc.communicate(input='password')

Должен быть в состоянии передать его как параметр. что-то вроде:

commands.getoutput('server stop -p password')

Кажется, это работает лучше:

import popen2

(stdout, stdin) = popen2.popen2('server stop')

stdin.write("password")

Но это еще не 100%. Даже при том, что " пароль " правильный пароль, который я до сих пор получаю su: Извините обратно из сценария csh, когда он пытается выполнить su для получения root-прав.

Чтобы избежать необходимости отвечать на вопрос о пароле в скрипте Python, я просто собираюсь запустить скрипт от имени пользователя root. На этот вопрос до сих пор нет ответа, но, думаю, сейчас я просто так сделаю.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top