文科生玩树莓派直接卡壳。请教关于开机发送 IP 的相关问题。
大致情况是这样的:
1.本人文科生,稍微会用一些 Linux,基本上就是能自己装个 Manjaro 复制粘贴写个 service 文件让 aria2 开机运行的级别。完全没有写代码经验。
2.前几天手痒买了个树莓派 4b 。凑合能装上系统做些最初级的工作。现在有个需求是:想让系统在开机的时候发送本机 IP 。在网上目前找到了一段 python 的代码,但是在运行的时候出现了错误。
代码如下
#!/usr/bin/env python # modified from http://elinux.org/RPi_Email_IP_On_Boot_Debian import subprocess import smtplib import socket from email.mime.text import MIMEText import datetime import urllib.request, urllib.error, urllib.parse # Change to your own account information to = 'mailr' email_user = 'mails' email_password = 'passwd' smtpserver = smtplib.SMTP('smtpserver', 587) smtpserver.ehlo() smtpserver.starttls() smtpserver.ehlo smtpserver.login(email_user, email_password) today = datetime.date.today() # Very Linux Specific arg='ip route list' p=subprocess.Popen(arg,shell=True,stdout=subprocess.PIPE) data = p.communicate() split_data = data[0].split() ipaddr = split_data[split_data.index('src')+1] extipaddr = urllib2.urlopen("https://extreme-ip-lookup.com/json/").read() my_ip = 'Local address: %snExternal address: %s' % (ipaddr, extipaddr) msg = MIMEText(my_ip) msg['Subject'] = 'IP For RaspberryPi on %s' % today.strftime('%b %d %Y') msg['From'] = email_user msg['To'] = to smtpserver.sendmail(email_user, [to], msg.as_string()) smtpserver.quit()
用 python 运行这段代码之后显示:
Traceback (most recent call last): File "ip_mailer.py", line 24, in <module> ipaddr = split_data[split_data.index('src')+1] ValueError: 'src' is not in list
用 python2 运行好似是没问题。
3.请问,如果要让这段代码够在 python3 下可以运行,应该如何修改。谢谢。(树莓派上装的是 Manjaro-ARM,默认不带 python2,另外我觉得也许会学着写点代码,考虑到 python2 好像快要停止维护了,所以我觉得可能准备一个 Python3 能运行的脚本比较好。)
4.关于开机发送 IP,我的想法是用这个脚本,然后写一个 service 文件开机运行,运行 30 秒后退出。目前在笔记本电脑上( Manjaro 系统下。对,我是 Manjaro 爱好者)用 python2 的话,实现预期目标没有问题。
5.鉴于莓派已经到手了,我又有些需求,所以也准备试着学一些 python3 码基础知识吧。各位大佬有什么推荐的教材码?我就准备自己在家看看,目前觉得需求可能就是批量下载 bt 种子这种情况能满足就够了。
感谢指教。