我想在本地计算机上使用Python脚本执行远程Bash脚本。
远程计算机上的Bash脚本
# script.sh
#!/bin/bash
echo "... Options ..."
echo " 1) Option 1"
echo " 2) Option 2"
read -p "Enter [1/2] : " n
case $n in
1) echo "Option 1 selected";;
2) echo "Option 2 selected";;
*) echo "Invalid option";;
esac
本地计算机上的Python脚本
# script.py
import sys
from paramiko import SSHClient
hostname = '10.0.0.1'
username = 'u'
password = 'p'
client = SSHClient()
client.load_system_host_keys()
client.connect(hostname, username=username, password=password)
stdin, stdout, stderr = client.exec_command('./script.sh')
for line in stdout:
sys.stdout.write(line)
在远程计算机上执行script.sh
没问题。
remote@computer:~$ ./script.sh
... Options ...
1) Option 1
2) Option 2
Enter [1/2] : 1
Option 1 selected
remote@computer:~$
问题是当我在本地计算机上尝试使用Python脚本时,该脚本似乎已挂起。我什至没有看到Enter [1/2] :
行被执行。
local@computer:~$ python script.py
... Options ...
1) Option 1
2) Option 2
此代码有什么问题?
所需的输出
local@computer:~$ python script.py
... Options ...
1) Option 1
2) Option 2
Enter [1/2] : 1
Option 1 selected
local@computer:~$
答案 0 :(得分:1)
尝试
stdin.write('1')
stdin.write('\n')
stdin.flush()
output = stdout.readlines()
print(''.join(output))
例如
$ python script.py
... Options ...
1) Option 1
2) Option 2
Option 1 selected
$