Solaris 10 で csh スクリプトを実行する python スクリプトを書いています。csh スクリプトはユーザーに root パスワードを要求します (私は知っています)が、python スクリプトがプロンプトにパスワードで応答するようにする方法がわかりません。これは可能ですか?csh スクリプトを実行するために使用しているものは次のとおりです。
import commands
commands.getoutput('server stop')
pexpectモジュールを見てください。あなたの場合と思われるインタラクティブなプログラムを扱うように設計されています。
ああ、それと、シェルまたは Python スクリプトで root のパスワードをハード エンコードすると、潜在的にセキュリティ ホールになることを覚えておいてください :D
サブプロセスを使用します。Popen() を呼び出してプロセスを作成し、communicate() を使用してテキストを送信します。すみません、PIPEを含めるのを忘れていました..
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 ルール!
標準ライブラリを使用したい人のために、make it run を追加input=
します。proc.communicate()
from subprocess import Popen, PIPE
proc = Popen(['server', 'stop'], stdin=PIPE)
proc.communicate(input='password')
パラメータとして渡すことができるはずです。何かのようなもの:
commands.getoutput('server stop -p password')
Python スクリプトでパスワードの質問に答える必要がないように、スクリプトを root として実行します。この質問はまだ答えが出ていませんが、とりあえずこの方法でやってみようと思います。
これはうまくいくようです:
import popen2
(stdout, stdin) = popen2.popen2('server stop')
stdin.write("password")
しかし、まだ 100% ではありません。「パスワード」は正しいパスワードですが、まだ su: root に su しようとしているときに csh スクリプトから戻ってきて申し訳ありません。