2010-12-02 10 views
0

Ich habe die Aufgabe zu schreiben einige "Systemsteuerung" auf PHP, um mit Linux-Konsole-basierte Anwendung, Spiel-Server zu arbeiten. Also, ich muss starten, zu stoppen (kein Problem, dort), und arbeiten mit der Konsole der Anwendung - send string Befehle an sie, und fangen Sie eine Ausgabe.Was ist der beste Weg, um mit Konsolenanwendung zu arbeiten, die im Hintergrund in PHP läuft?

Was ist der beste Weg, es zu tun? Ich denke darüber nach, einige .sh-Skripte/Templates zu erstellen und sie mit php shell_exec-Befehlen aufzurufen - das ist der einfachste Weg. Aber wie funktioniert die Arbeit mit der Konsole - was ist der beste Weg, um Befehle zu senden und eine Ausgabe zu fangen? Rufen Sie "fg" vor dem Ausführen von Skript und "bg" nach? Bildschirme verwenden und darauf umschalten?

Was ist der beste Weg, dies zu tun?

+2

Sehen Sie sich einfach http://stackoverflow.com/questions/1746207/how-to-ipc-between-php-clients-and-ac-daemon-server an. – Andrew

Antwort

0

Der beste Weg wäre, die "andere Anwendung" als Daemon im Hintergrund auszuführen und über Socket (tcp, unix, ..) mit ihm zu kommunizieren.

Dies könnte sehr einfach gemacht werden, wenn Sie tatsächlich die Konsole-basierte Anwendung auch entwickeln. Wenn Sie dies nicht tun und diese Anwendung nur von stdin/stdout liest/schreibt, könnten Sie einen anderen Controller-Prozess erstellen, der diese beiden E/A-Kanäle an einem Socket verfügbar macht.

Die erste Idee, die ich daran halte, wäre ein Python-Skript, das das Modul subprocess verwendet, um den anderen Prozess im Hintergrund auszuführen und dann mit ihm zu kommunizieren. Dann lassen Sie das Python-Skript einen Socket öffnen, um mit der PHP-Anwendung zu kommunizieren (natürlich sollten Sie in der Lage sein, es in Ihrer bevorzugten Sprache zu machen. Meine ist Python :)).

0

Ich habe gerade eine verrückte Idee. Ich kann named pipe - "mkfifo pipename", und dann mit ihm von shell_exec arbeiten (zum Beispiel kann ich tun "echo quit >> pipename".

Problem ist, dass ich nicht eine Antwort speziell bekommen kann Letzter Befehl, aber es wäre zu cool. In dieser Phase des Projekts muss ich nur Befehle an den Server senden und Console-Ausgabe zu fangen. Ich werde etwas mehr Zeit denken, aber es scheint mit Named Pipes ist die einfachste Lösung.

+0

Was Sie brauchen, sind definitiv Unix-Sockets (http : //php.net/manual/de/book.sockets.php)! Sie sind ziemlich wie Named Pipes, aber sie funktionieren genau wie Sockets, ohne das Nee d von öffnenden Häfen, usw. – redShadow

Verwandte Themen