Ich habe ein Python-Programm, das ein neues Python-Skript in einem neuen Terminal erstellen und ausführen wird. Um dies zu tun, benutze ich subprocess.Popen. Ich versuche, die PID des neuen Prozesses mit .pid zu bekommen. Der Wert dieser PID scheint jedoch nicht mit der tatsächlichen PID des neu erstellten Prozesses übereinzustimmen (die beiden Werte stimmen nicht überein).Erhalte den Status eines Python-Prozesses, der in einem anderen Terminal ausgeführt wurde
Hier ist eine Probe von meinem Code:
from subprocess import Popen
p = Popen("gnome-terminal -e 'python'",shell = True)
print p.pid
In dem neu eröffneten Terminal, ich versuche, die pid zu erhalten mit:
import os
print os.getpid()
Ich erhalte zwei verschiedene Werte. Kann jemand das richtige Pid bekommen? Ich muss dies wissen, wenn der zweite Prozess abgeschlossen ist, um eine Aktion im ersten Prozess zu machen.
Danke für Ihre Hilfe!
Wenn Sie weitere Informationen benötigen, bitte lassen Sie mich wissen :)
Das stimmt! Was ich getan habe ist, dass ich die PID des neuen Prozesses in eine Textdatei geschrieben habe und dann habe ich diese Datei im alten Prozess geöffnet, um den Status des erstellten Terminals zu überwachen. Es ist ein bisschen kompliziert, aber es funktioniert zumindest. Wie kann ich dies über Rohr/Steckdose tun? Ist es einfacher? –
@Eliekhalifeh: Was zu verwenden ist, hängt von Ihrem Anwendungsfall ab. Wenn eine einfache Textdatei für Sie arbeitet (z. B. kein Risiko eines gleichzeitigen Zugriffs, wenn zwei oder mehr Python-Prozesse sie überschreiben, bevor Ihre übergeordneten Python-Skripts die entsprechenden PIDs lesen können), verwenden Sie sie. Der Code für eine benannte Pipe sieht fast identisch aus, aber es werden keine Daten auf die Festplatte geschrieben (und daher ist die PID nicht verfügbar, wenn das übergeordnete Python-Skript nach dem Lesen abbricht). Unix-Sockets ermöglichen beide Wege zu kommunizieren (Eltern <-> Kind Python-Skripte). tcp/udp-Sockets ermöglichen die Kommunikation zwischen verschiedenen Maschinen (z. B. über das Internet). – jfs
@ j-f-sebastian Es scheint komplizierter! Die Textdatei, die ich erstelle, wird gelöscht, sobald der Elternteil stirbt, so dass keine Dateien auf dem Datenträger gespeichert werden.Haben Sie einen Link, wo ich sehen kann, wie Unix-Sockets verwendet werden können? Vielen Dank! Ich werde deine Antwort akzeptieren, da sie nützlicher ist als die andere! –