从Python运行Expect脚本的最简单方法

时间:2012-06-22 16:38:36

标签: python ssh subprocess expect

我正在尝试指示我的Python安装执行Expect脚本“myexpect.sh”:

#!/usr/bin/expect
spawn ssh usr@myip
expect "password:"
send "mypassword\n";
send "./mycommand1\r"
send "./mycommand2\r"
interact

我在Windows上,因此将Expect脚本中的行重写为Python不是一种选择。有什么建议?有没有什么可以像“./myexpect.sh”从bash shell那样运行它?


我在subprocess命令上取得了一些成功:

subprocess.call("myexpect.sh",  shell=True)

我收到错误:

  

myexpect.sh不是有效的Win32应用程序。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:18)

使用pexpect library。这是Expect功能的Python版本。

示例:

child = pexpect.spawn('Some command that requires password')
child.expect('Enter password:')
child.sendline('password')
child.expect(pexpect.EOF, timeout=None)
cmd_show_data = child.before
cmd_output = cmd_show_data.split('\r\n')
for data in cmd_output:
    print data

Pexpect附带了许多可供学习的例子。要使用interact(),请从示例中查看script.py

(对于Windows,有替代pexpect。)

答案 1 :(得分:0)

由于它是.expect脚本,我认为你应该更改脚本的扩展名。

而不是使用

subprocess.call("myexpect.sh", shell=True)

你应该使用

subprocess.call("myexpect.expect", shell=True)