2016-12-11 5 views
0

Ich fragte eine sehr ähnliche Frage vor einer Woche und ich versuche immer noch, eine Antwort zu finden.C# system.process stdin/stdout Handhabung mit Unity3D

Ich habe ein komplettes neues Unity3D-Projekt eingerichtet, ein Objekt darin eingefügt, ein C# -Skript erstellt und den folgenden Code in die Start() -Methode eingefügt.

void Start() { 

    Process myProcess = new Process(); 

    myProcess.StartInfo.FileName = "gnome-terminal"; 
    myProcess.StartInfo.UseShellExecute = false; 
    myProcess.StartInfo.RedirectStandardInput = true; 
    myProcess.StartInfo.RedirectStandardOutput = true; 
    //myProcess.StartInfo.CreateNoWindow = true; for testing 
    myProcess.Start(); 
    //Thread.Sleep(6000); somebody suggest wait some time, but it make no difference 
    myProcess.StandardInput.WriteLine("sensible-browser"); 

} 

Ich baue das Projekt für mein Linux Ubuntu System und führe es aus. Ein neues Terminal erscheint und das war's. Normalerweise sollte der Browser jetzt geöffnet sein, tut es aber nicht.

Das ist nur mein Testprogramm. In meinem Ursprung muss ich von/in die stdin/stdout lesen/schreiben.

bin ich völlig verzweifelt und hoffentlich jemand von euch kann mir helfen

Dank

+0

haben Sie versucht, den Streamwriter am Ende zu schließen? 'myProcess.StandardInput.Close();' – Bijan

+0

Ja, in diesem Fall ist das Terminal noch offen, aber nichts passiert. –

+0

Wenn es nicht einmal "sensible-browser" schreibt, versuchen Sie, die letzte Zeile mit einer Verzögerung aufzurufen. – Bijan

Antwort

0

Verwenden bash statt gnome-terminal.

Process myProcess = new Process(); 
myProcess.StartInfo.FileName = "bash"; 
myProcess.StartInfo.UseShellExecute = false; 
myProcess.StartInfo.RedirectStandardInput = true; 
myProcess.Start(); 
myProcess.StandardInput.WriteLine("sensible-browser"); 
myProcess.StandardInput.Close(); 
+0

Ich kopiere deinen Code, aber wenn ich es ausführe passiert nichts, sogar das Terminal hat noch nicht geöffnet. Ich bekomme das gleiche Ergebnis, wenn ich es mit dem vollständigen PATH versuche: myProcess.StartInfo.FileName = "/ bin/bash"; –

+0

Dein Code funktioniert nicht mit ** mono **, aber meins funktioniert (getestet unter Ubuntu 14.04). Ich habe Unity3D nicht für Linux installiert, so dass ich den Code für Sie mit dem Mono, das Unity3D verwendet, nicht testen kann. – zwcloud

+0

Ich entwickle das Projekt auf meinem Windows-System und baue es für die "Linux x86" -Plattform. Ich versuche es auf einem 14.04.3 Ubuntu-Rechner auszuführen und mein Hauptprogramm läuft fehlerfrei. Über Ihre zweite Frage: Ja, ich erstelle ein neues Projekt und befestige das Skript an einen einfachen Würfel in der Szene (nur zum Testen) –