是的,你可以使用任何工控方法例如,你可以通过套接字发送计数器:
self.request.sendall(json.dumps(dict(counter=a)).encode('ascii'))
如果您想从无法修改的已运行进程中获取值,那么您可以尝试连接调试器:
$ sudo gdb python <pid of running process>
要启用特定于 python 的帮助程序命令,请添加到您的~/.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])