我创建了一个期望脚本,在执行时,ssh 会连接到服务器并执行一系列命令。伪代码如下所示:
#!/usr/bin/expect
spawn ssh usr@myip
expect "password:"
send "mypassword\n";
send "./mycommand1\r"
send "./mycommand2\r"
interact
当从 bash shell ($ ./myscript.txt) 执行时,代码执行得很好。我现在想做的是在 python 文件中有一行以与 bash shell 相同的方式运行脚本中的命令。伪代码如下所示:
import subprocess
def runmyscript():
subprocess.call("myscript.txt", executable="expect", shell=True)
def main():
run = runmyscript():
if __name__ == '__main__': main()
我已将 myscript.txt 脚本文件与我的 runmyscript.py 文件放在同一目录中,但是当我运行 python 文件时,我收到错误:
WindowsError: [Error 2] The system cannot find the file specified
我已经阅读了 python.org 网站上的文档,但无济于事。有没有人有一个巧妙的解决方案来从 .py 代码中执行 bash 脚本?
解决方案:此代码对我有用。
child = subprocess.Popen(['bash', '-c', './myscript.txt'], stdout = subprocess.PIPE)
使用此代码将 Expect 文件调用到 ssh 并从 .py 文件向服务器发送命令 - 如果您无法将 pycrypto/paramiko 构建到您的机器上,这是有用的解决方案。