我正在编写使用paramiko python库在virtualbox VM中执行bash脚本的python脚本。下面的代码段:
stdin, stdout, stderr = i[2].exec_command("\"\Program Files\Oracle\VirtualBox\VBoxManage.exe\" guestcontrol \"virtnet_proxy\" run --exe \"/home/username/show_ip.sh\" --username username --password password" )
exit_status = stdout.channel.recv_exit_status()
if exit_status == 0:
proxy_ip=stdout.readlines()
print ("got proxy ip from host ", i[0], proxy_ip, stderr.readlines())
连接到Windows主机和应该打印VM接口的IP地址。如果您在cmd中运行此命令,效果很好,但使用paramiko ssh客户端,stdout为空。如果您运行类似的代码,只是连接到linux virtualbox主机(并运行linux命令),则stdout.readlines()
可以正常工作,并且包含bash脚本的输出。标准输出:
VBoxManage.exe: warning: Error getting stdout handle: VERR_NOT_IMPLEMENTED\r\n', 'VBoxManage.exe: warning: Error getting stderr handle: VERR_NOT_IMPLEMENTED\r\n
Bash脚本:
ips=$(hostname --all-ip-addresses)
read -ra arr <<< "$ips"
echo"${arr[0]}"
正如我所说,只有在连接到Windows主机并在客户机上运行vboxmanage命令时,stdout才为空。
谢谢你,Wojtek
编辑:我已经将Windows主机上的ssh服务器从OpenSSH更改为FreeSSHd,并且代码起作用了!