Wprowadzenie
To nie jest kompletne rozwiązanie twojego problemu, ale może pomóc znaleźć przyczynę! Mam podobny problem i trochę go przetestowałem. Być może możesz wykonać te same testy w ramach konfiguracji, abyśmy mogli zebrać więcej informacji na temat problemu.
O
Jak powiedziałem, faktycznie mam (prawie) taki sam problem jak ty z odwróconą sytuacją hosta / gościa. Mój host to Windows 10, a moim gościem jest Ubuntu. Chcę uruchomić skrypt Pythona na maszynie gościa w celu komunikacji host / gość za pośrednictwem standardowego we / wy.
Doświadczam takiego samego zachowania jak ty. - Standardowe dane wyjściowe skryptu Python są wyświetlane na hoście systemu Windows 10, ale nie jestem w stanie nic zapisać na standardowym wejściu maszyny gościa.
Dlatego zbudowałem środowisko testowe, które emuluje zachowanie opisane w cytowanym już podręczniku VirtualBox (wyróżnienie dodane przeze mnie):
uruchom Wykonuje program gościa - przekazuje stdout , stderr i stdin do / z hosta, dopóki się nie zakończy. - Źródło )
Testowanie środowiska
Środowisko testowe składa się z następujących dwóch programów:
- Kontrola VM: W środowisku testowym wywoływany jest tutaj emulator zachowań VM. Kontrola VM normalnie by zadzwoniła
VBoxManage guestcontrol ... run ...
- Emulator zachowań VM: Gdy ten program jest wywoływany przez VM Control, linia jest zapisywana na standardowe wyjście. Jeśli VM Control zapisze następnie coś na standardowym wejściu, emulator zachowań VM wyśle echo danych wejściowych na standardowe wyjście.
Kontrola VM (zbudowany z części MSDN )
using System;
using System.Diagnostics;
using System.IO;
namespace VM_Control
{
class Program
{
private static StreamWriter vmComInput = null;
static void Main(string[] args)
{
// Process instance for executable
Process vmCom = new Process();
// Path to executable
vmCom.StartInfo.FileName = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory,
@"..\..\..\VM Behaviour Emulator\bin\Debug\VM Behaviour Emulator.exe"));
// Process configuration
vmCom.StartInfo.UseShellExecute = false;
vmCom.StartInfo.CreateNoWindow = true;
vmCom.StartInfo.RedirectStandardError = true;
vmCom.StartInfo.RedirectStandardInput = true;
vmCom.StartInfo.RedirectStandardOutput = true;
// Setup EventHandler
vmCom.OutputDataReceived += new DataReceivedEventHandler(VMComOutputHandler);
// Start the executable in a separate process
vmCom.Start();
// Enable OutputDataReceived events
vmCom.BeginOutputReadLine();
// Link local StreamWriter instance to processes StandardInput
vmComInput = vmCom.StandardInput;
// Wait until the process finished executing
vmCom.WaitForExit();
}
private static void VMComOutputHandler(object sendingProcess,DataReceivedEventArgs line)
{
if (!String.IsNullOrEmpty(line.Data))
{
// Print received StandardOutput line
Console.WriteLine(line.Data);
// Provide some input through the StandardInput StreamWriter
if (line.Data == "Enter something: ")
vmComInput.WriteLine("... an input string entered by a StreamWriter instance.");
// Another input through the StandardInput StreamWriter would close the application
// at this point
else if (line.Data == "Press enter to quit the application")
Debug.WriteLine("Process finished");
}
}
}
}
Emulator zachowań VM
using System;
namespace VM_Behaviour_Emulator
{
class Program
{
static void Main(string[] args)
{
string input = "";
// Prompt user for input
Console.WriteLine("Enter something: ");
input = Console.ReadLine();
// Echo user's input
Console.WriteLine("You entered: {0}", input);
// Wait until user quits the application
Console.WriteLine("Press enter to quit the application");
Console.ReadLine();
}
}
}
Wniosek
Podczas gdy środowisko testowe działa zgodnie z oczekiwaniami (może przekazywać dane do emulatora zachowań maszyny wirtualnej za pośrednictwem standardowego wejścia) Kontrola maszyn wirtualnych zachowuje się tak samo, jak opisano podczas wywoływania VBoxManage guestcontrol ... run ...
. Po prostu nie rozpoznaje danych zapisanych za pomocą standardowego wejścia. To samo zachowanie występuje podczas próby uruchomienia VBoxManage guestcontrol ... run ...
z wiersza poleceń hosta.
Jak już wspomniałem, możliwe jest zbudowanie podobnego środowiska testowego. Może uzyskamy więcej informacji o problemie.