Я пишу сценарий Python, выполняющий сценарий bash внутри виртуальной машины VirtualBox с использованием библиотеки Paramiko 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 и должен печатать IP-адрес интерфейса виртуальной машины. Если вы запустите эту команду в cmd, она будет работать нормально, но с помощью ssh-клиента paramiko stdout будет пустым. Если вы запускаете аналогичный код, за исключением того, что вы подключаетесь к хосту linux virtualbox (и запускаете команду linux), stdout.readlines()
работает нормально и содержит вывод скрипта bash. Вывод Stderr:
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]}"
Как я уже сказал, stdout пуст, только если вы подключаетесь к хосту Windows и запускаете команду vboxmanage на гостевой машине.
Спасибо заранее, Войтек