我有一个运行很长时间的python脚本,它用一些“项目”更新了一个列表
我需要能够在运行此python脚本时查询该脚本,以便从此列表的内容中打印出内容。
不确定在python2.6上是否可行?
添加了以下代码,该代码基本上从日志文件生成服务器列表。这是一个基本的脚本,如果我能够根据需要转储它生成的列表,那么这将使代码更具干扰性。
所以我得到了一个脚本,该脚本可以满足我的理论要求。我唯一注意到的是,在从客户那里收到的来自“ buf”的打印过程中,打印出来的是主工具。
我无法解决如何将其从主要工具转移到客户端工具的问题。
#!/usr/bin/python
import sys
import time
import re
import threading
import socket
import errno
def handle():
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
PORT = 19999
HOST = '127.0.0.1'
MAX_LENGTH = 4096
try:
serversocket.bind((HOST, PORT))
except socket.error, v:
errorcode=v[0]
print "Error found during startup [ %s ] " % (errorcode)
sys.exit(0)
serversocket.listen(10)
(clientsocket, address) = serversocket.accept()
while True:
buf = clientsocket.recv(MAX_LENGTH)
if buf == '': return #client terminated connection
elif buf == "dump":
for item in serverList:
print item
else:
print "Unrecognised command entered"
print buf
def follow(thefile):
thefile.seek(0,2)
while True:
line = thefile.readline()
if not line:
time.sleep(0.1)
continue
yield line
handlethread = threading.Thread(target=handle)
handlethread.daemon = True
handlethread.start()
serverList = []
print "hello there"
logfile = open("/var/log/messages","r")
loglines = follow(logfile)
for line in loglines:
servername=line.split(' ')[3]
if servername not in serverList:
serverList.append(servername)
print "added %s to list of servers" % (servername)
#!/usr/bin/python
import socket
import sys
HOST = '127.0.0.1'
PORT = 19999
s = socket.socket()
s.connect((HOST, PORT))
while 1:
msg = raw_input("Command To Send: ")
if msg == "close":
s.close()
sys.exit(0)
s.send(msg)
答案 0 :(得分:0)
您可以在脚本运行时定期将列表的内容保存到硬盘中。因此,在长时间运行的脚本的主循环中,只需Pickle the contents of the list。每当您需要在执行期间检查值时,只需解开保存的文件。有关Python中对象序列化的更多信息,请参见Pickle。
答案 1 :(得分:-1)
如果您只是想定期打印出当前列表,则可以使用打印功能。像这样:
vals = []
for elem in range(10):
vals.append(elem)
print vals