可以在运行时使python脚本转储其当前列表吗?

时间:2018-08-14 07:02:54

标签: python list

我有一个运行很长时间的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)

2 个答案:

答案 0 :(得分:0)

您可以在脚本运行时定期将列表的内容保存到硬盘中。因此,在长时间运行的脚本的主循环中,只需Pickle the contents of the list。每当您需要在执行期间检查值时,只需解开保存的文件。有关Python中对象序列化的更多信息,请参见Pickle

答案 1 :(得分:-1)

如果您只是想定期打印出当前列表,则可以使用打印功能。像这样:

vals = []
for elem in range(10): 
    vals.append(elem)
    print vals