让Python在运行csh脚本时输入密码

6 投票
7 回答
19742 浏览
提问于 2025-04-11 09:30

我正在写一个Python脚本,用来在Solaris 10系统中执行一个csh脚本。这个csh脚本会要求用户输入根密码(我知道这个密码),但我不太确定怎么让Python脚本自动输入这个密码来回答提示。这样做可能吗?下面是我用来执行csh脚本的代码:

import commands

commands.getoutput('server stop')

7 个回答

2
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真是太棒了!

5

可以使用 subprocess 模块。通过调用 Popen() 来创建你的进程,然后用 communicate() 方法发送文本。抱歉,我忘了提到 PIPE 了……

from subprocess import Popen, PIPE

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

proc.communicate('password')

最好还是避免直接使用密码,可以尝试使用像 sudo 和 sudoers 这样的方案。之前提到的 Pexpect 不是标准库的一部分。

9

看看这个pexpect模块吧。它是专门用来处理需要互动的程序的,这听起来正好适合你的情况。

哦,对了,记得在脚本里直接写入root用户的密码是有安全隐患的哦 :D

撰写回答