SQLite Fehler beim Laden zwei Python-Skripte gleichzeitig
-
05-10-2019 - |
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?
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.