大家好,我是python新手,我尝试完成一项任务。 任务如下:我需要读取一个名为“ ip.txt”的文件,并逐行读取该文件,然后使用urlopen将txt文件行传递到URL。
这是我的剧本
from urllib.request import urlopen
def send_alert():
from smtplib import SMTP
from email.mime.text import MIMEText
msg = MIMEText('nuf said')
msg['Subject'] = 'inventi.lt is unreachable'
msg['From'] = 'XXX@xxxx.com'
msg['To'] = 'jnin@xxxx.com'
server = SMTP('mail.xxxxxx.com:2525')
server.ehlo()
server.starttls()
server.login('jnin@xxxxx.com', 'password')
server.sendmail('jnin@xxxx.com', ['jnin@xxx.com'], msg.as_string())
server.quit()
###### LEER FILE
ip_dirreciones = open("ip.txt", "r")
try:
urlopen ('http://VARIABLE-HERE/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT')
print ("OK")
except:
send_alert()
想法是该脚本将自动运行文本文件中的每一行
样本
http://1.1.1.1/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT
http://1.1.1.3/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT
http://1.1.1.2/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT
更新
我取得了一些进步,但并没有一直工作。我只需要脚本能够读取和使用 ip.txt 文件的每一行即可。
它仅读取第一行,然后停止。 这是代码
from urllib.request import urlopen
def send_alert():
from smtplib import SMTP
from email.mime.text import MIMEText
msg = MIMEText('nuf said')
msg['Subject'] = 'inventi.lt is unreachable'
msg['From'] = 'email@email.com'
msg['To'] = 'email@email.com'
server = SMTP('mail.domain.com:2525')
server.ehlo()
server.starttls()
server.login('email@email.com', 'password!')
server.sendmail('email@email.com', ['email@email.com'], msg.as_string())
server.quit()
###### LEER FILE
f = open("ip.txt", "r")
for x in f:
# print('http://'+ x +'/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT')
try:
urlopen ('http://'+ x +'/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT')
print ("OK")
except:
send_alert()
答案 0 :(得分:2)
您从以下文件中读取内容:
with open('ip.txt', 'r') as file:
link_list = file.readlines()
这将创建一个列表,其中.txt
文件的每一行都将转换为列表中的项目。然后,您可以遍历此列表以依次使用每个项目!
如果您的问题是关于组合字符串以建立链接(如您的.txt文件中包含的内容:
那么你会说:
for link in link_list:
urlopen ('http://{}/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT'.format(link))
这将动态地将{}
填充为link
@EDIT
在您的评论中,您说b'192.168.0.77\n'
的标头中有一个错误,这是因为当程序期望字符串时,会给您一堆字节。可以通过以下方法避免这种情况:
urlopen ('http://{}/cgi-bin/api-sys_operation?passcode=2000&request=REBOOT'.format(link.decode('utf-8')))
唯一的区别是我们将.decode()
更改为utf-8
字符串!