是的,你可以使用任何IPC method例如,你可以send the counter over a socket:
self.request.sendall(json.dumps(dict(counter=a)).encode('ascii'))
如果你想從一個已經運行的過程中,你不能修改,那麼你可以嘗試的價值attach a debugger:
$ sudo gdb python <pid of running process>
啓用特定蟒蛇輔助命令,添加到您的~/.gdbinit
:
add-auto-load-safe-path /path/to/python-gdb.py
的例子gdb的會話可能看起來像:
>>> 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
從另一個Python腳本,你可以在批處理模式下運行GDB:
#!/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])
來源
2015-10-05 04:37:10
jfs
我假設它是,但它很難從內存中讀取,如果是這樣會有多複雜。主要原因是腳本現在已經運行了一段時間。 – Leb
@Leb:你的意思是說你有一個不能修改的正在運行的進程?我爲正在運行的進程添加了一個解決方案。 – jfs
是的調試器似乎更接近我在找什麼。我嘗試通過'help'查看命令,但是如何檢索該變量? – Leb