Frage

Ich habe zwei Python-Skripte, die gleichzeitig ausgeführt werden müssen, weil sie miteinander in Wechselwirkung treten. Ein Skript ist ein ‚Server‘ Skript lokal ausgeführt wird und der andere Client-Skript, das eine Verbindung herstellt, um es über eine Steckdose. Normalerweise öffne ich nur ein paar Terminal Registerkarten und führen Sie das Server-Skript in ein und den Client in der anderen. Nach dem Start und jedes Skript immer und immer wieder zu stoppen, wollte ich mit nur einem Befehl beide Skripte ein Bash-Alias ??machen laufe und kam mit dieser:

gnome-terminal --tab -e "python server.py" --tab -e "python client.py"

Doch nun der Server-Skript wird eine SQLite OperationalError Erhöhung sagen, dass einer meiner Datentabellen nicht existiert. Aber wenn ich die Skripte manuell alles laufen funktioniert gut. Ich habe keine Ahnung, was los ist, aber ich dachte, dass vielleicht die Skripte zusammen ausgeführt wurde, nicht die Server-Skript genug Zeit, um zu initialisieren und seine Verbindung zur Datenbank zu machen. Also habe ich eine time.sleep (5) in dem Client-Skript setzen, aber sobald es beginnt ich den gleichen Fehler.

Wer eine Idee, was passieren könnte? Oder weiß jemand von irgendwelchen Alternativen zum Starten zwei Python-Skripte mit einem Befehl?

War es hilfreich?

Lösung

Versuchen Sie, die beiden Befehle in einer Kombination:

gnome-terminal --tab -x bash -c "python server.py & sleep 5; python client.py"

Ich denke, es ist besser, den Schlaf-Befehl setzt außerhalb Client (falls erforderlich), da es Situationen geben kann, in denen der Server bereits gestartet ist und der Kunde muss nicht schlafen.


-x Mittel

-x, --execute
         Execute the remainder of the command line inside the terminal.

Der Befehl ruft bash:

bash -c "python server.py & sleep 5; python client.py"

bash hat wiederum einen -c-Flag, das Mittel

-c string If  the  -c option is present, then commands are read from string.  If
         there are arguments after the string, they are assigned to  the  posi‐
         tional parameters, starting with $0.

Sie können mit experimentieren

gnome-terminal --tab -e "python server.py & sleep 5; python client.py"

Das könnte auch funktionieren. Wenn Sie zum ersten Mal laufen bash, dann ~ / .bashrc gelesen wird. Ohne Aufruf bash, ich denke, standardmäßig / bin / sh stattdessen aufgerufen wird.

Wenn Sie erhalten

"socket.error: [Errno 98] Address already in use",

es wahrscheinlich bedeutet, dass der Server bereits gestartet wurde, und den Betrieb der Server ein zweites Mal versagt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top