Holen Sie sich eine Variable aus einem laufenden Programm

Ich habe ein Skript, das tagelang läuft, und drinnen gibt es einen Counter. Der Zähler wird in eine Datei periodisch geschrieben, ist es möglich, herauszufinden, den Wert, dass der Zähler von einem anderen Python-Skript, Linux-Befehl oder sogar Java gesetzt ist?

Beispiel für einfaches Pythonenzähler:

import time import random a = 0 while True: a +=1 time.sleep(random.random()) 

Ich interessiere mich für den Wert a zu einem bestimmten Zeitpunkt.

One Solution collect form web for “Holen Sie sich eine Variable aus einem laufenden Programm”

Ja, du könntest jede IPC-Methode verwenden, zB kannst du den Counter über einen Sockel senden :

 self.request.sendall(json.dumps(dict(counter=a)).encode('ascii')) 

Wenn du den Wert von einem bereits laufenden Prozess bekommen möchtest, den du nicht ändern kannst, dann kannst du versuchen, einen Debugger anzuhängen :

 $ sudo gdb python <pid of running process> 

Um python-spezifische Helfer-Befehle zu aktivieren, füge deine ~/.gdbinit :

 add-auto-load-safe-path /path/to/python-gdb.py 

Die Beispiel-GDB-Session könnte wie folgt aussehen:

 >>> thread apply all py-list Thread 1 (Thread 0x7f68ff397700 (LWP 9807)): 2 import random 3 4 a = 0 5 while True: 6 a +=1 >7 time.sleep(random.random()) >>> py-print a global 'a' = 83 

Aus einem anderen Python-Skript kannst du im Batch-Modus gdb ausführen:

 #!/usr/bin/env python import shlex import subprocess cmd = shlex.split("sudo gdb --batch -ex 'py-print a' python") + [str(pid)] output = subprocess.check_output(cmd, stderr=subprocess.DEVNULL, cwd=path_to_python_gdb) a = int(output.rsplit(b'\n', 2)[-2].rpartition(b' ')[2]) 
  • Wie dauerhaft "Draht" eine EC2 IP-Adresse zu django in einem virtualenv
  • Zip-Datei mit PPMD-Komprimierung, programmgesteuert entpacken
  • Wie kann ich die Tastatur sperren, um zu verhindern, dass weitere Tastendrücke auf X11 / Linux / Gnome gesendet werden?
  • Wie pygame Schriftart zu installieren
  • Wie python-Entwickler-Paket installieren?
  • Lesen Sie den Inhalt der RAR-Datei in den Speicher in Python
  • Wo finde ich das xml.dom python paket für den python-2.6.0-8.9.28 und ich habe eine suse / x86_64 version von Linux version
  • MPRIS + Python (dbus): Lese- und Schreibeigenschaften
  • Interaktion zwischen Python-Skript und Linux-Shell
  • Apt-get install für verschiedene pythonversionen
  • Ignorieren Sie den Fall in Glob () unter Linux
  • Python ist die beste Programmiersprache der Welt.