2015-10-05 33 views
1

我有一個運行了幾天的腳本,裏面有一個計數器。計數器被定期寫入文件,是否有可能從另一個python腳本,linux命令甚至java中找出計數器的值?簡單的Python計數器從正在運行的程序中獲取變量

例子:

import time 
import random 

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

我在給定的時間感興趣的a值。

回答

0

是的,你可以使用任何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]) 
+0

我假設它是,但它很難從內存中讀取,如果是這樣會有多複雜。主要原因是腳本現在已經運行了一段時間。 – Leb

+0

@Leb:你的意思是說你有一個不能修改的正在運行的進程?我爲正在運行的進程添加了一個解決方案。 – jfs

+0

是的調試器似乎更接近我在找什麼。我嘗試通過'help'查看命令,但是如何檢索該變量? – Leb

相關問題