【发布时间】:2015-03-10 19:33:45
【问题描述】:
希望能提供一些关于如何增强我的 python 脚本以解决问题的线索。我有一个文件,其中列出了数千个移动工作站和 IP 地址,每五分钟更新一次。我使用 Paramiko 将 ssh 连接到每个工作站以验证服务是否正在运行(在此示例中为 crond)。我遇到的问题是,当我启动我的 python 脚本时,它会将大文件读入内存,当它下降 1/3 时,IP 地址已经改变,大部分 IP 地址不再有效。有没有办法让 python 打开然后在工作站每次搜索之前关闭文件?这将确保 IP 是当前 IP。我在下面编写的 python 脚本可以工作,但我又遇到了旧 IP 信息的问题。谢谢。
The contents of WKSIPS.txt are in the format:
WORK 1234 Cell IP: 10.10.10.10
WORK 4567 Cell IP: 10.10.10.11
#!/usr/bin/python
import paramiko, os, string, threading
import getpass
import socket
import sys
FileName=open('WKSIPS.txt', 'r')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
for line in FileName.readlines():
WKSid = line.split()
try:
if WKSid[0] == 'WORK' :
WKSip = WKSid[4]
ssh.connect(WKSip, username='user', password='password', timeout='3')
stdin, stdout, stderr = ssh.exec_command('service crond status')
Out = stdout.readlines()
print ("WORK " + WKSid[1], Out)
ssh.close()
FileName.close
except paramiko.SSHException, e:
print ('WORK' + WKSid, WKSip, "Invalid Password")
【问题讨论】:
-
如果您按照您的建议关闭并重新打开文件,您想从“新”文件的开头重新开始吗?还是在您离开的同一行?从同一行开始会导致任何问题(例如行数改变)吗?
-
您可以使用multiprocessing module 并行执行一些工作。至少,您可以让子进程执行 ssh 工作,这样您就不会阻止文件读取。
-
因为这个工作站名称是静态的,而且只有 IP 地址发生变化,我需要它从中断的地方继续。
-
行的顺序有变化吗?行数有变化吗?
-
如果在无效 IP 地址上运行命令会发生什么?这是您可以识别并选择忽略的事件吗?