5

Solaris 10 で csh スクリプトを実行する python スクリプトを書いています。csh スクリプトはユーザーに root パスワードを要求します (私は知っています)が、python スクリプトがプロンプトにパスワードで応答するようにする方法がわかりません。これは可能ですか?csh スクリプトを実行するために使用しているものは次のとおりです。

import commands

commands.getoutput('server stop')
4

7 に答える 7

8

pexpectモジュールを見てください。あなたの場合と思われるインタラクティブなプログラムを扱うように設計されています。

ああ、それと、シェルまたは Python スクリプトで root のパスワードをハード エンコードすると、潜在的にセキュリティ ホールになることを覚えておいてください :D

于 2008-10-23T18:58:34.357 に答える
5

サブプロセスを使用します。Popen() を呼び出してプロセスを作成し、communicate() を使用してテキストを送信します。すみません、PIPEを含めるのを忘れていました..

from subprocess import Popen, PIPE

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

proc.communicate('password')

パスワードを避けて、sudo や sudoers のようなスキームを試してみてください。他の場所で言及されている Pexpect は、標準ライブラリの一部ではありません。

于 2008-10-23T18:25:33.597 に答える
1
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 ルール!

于 2008-11-26T19:58:36.107 に答える
1

標準ライブラリを使用したい人のために、make it run を追加input=します。proc.communicate()

from subprocess import Popen, PIPE
proc = Popen(['server', 'stop'], stdin=PIPE)
proc.communicate(input='password')
于 2009-04-30T21:24:48.800 に答える
0

パラメータとして渡すことができるはずです。何かのようなもの:

commands.getoutput('server stop -p password')
于 2008-10-23T18:24:49.340 に答える
0

Python スクリプトでパスワードの質問に答える必要がないように、スクリプトを root として実行します。この質問はまだ答えが出ていませんが、とりあえずこの方法でやってみようと思います。

于 2008-10-24T16:39:21.160 に答える
0

これはうまくいくようです:

import popen2

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

stdin.write("password")

しかし、まだ 100% ではありません。「パスワード」は正しいパスワードですが、まだ su: root に su しようとしているときに csh スクリプトから戻ってきて申し訳ありません。

于 2008-10-23T18:57:21.177 に答える