如何在PythonAnywhere上全天候运行ISS追踪Python脚本?
在PythonAnywhere上持续运行ISS追踪脚本的指南
一、如何设置脚本无限运行
针对免费账户(有24小时后台进程限制)
- 上传脚本
登录PythonAnywhere后,进入「Files」标签页,点击「Upload a file」上传本地脚本;或者在「Code」标签页新建文件,直接粘贴代码。 - 安装依赖
进入「Consoles」标签页,打开Bash控制台,运行命令:
确保pip install requests --userrequests库安装成功(脚本依赖该库调用API)。 - 启动后台进程
在Bash控制台运行命令,让脚本后台运行并记录日志:
其中nohup python3 your_script_name.py > iss_tracker_log.txt 2>&1 &your_script_name.py替换成你的脚本文件名,日志会写入iss_tracker_log.txt,方便后续排查问题。 - 设置每日重启任务
由于免费账户后台进程会在24小时后终止,需设置定时任务自动重启脚本:- 进入「Tasks」标签页,点击「Create a new task」
- 选择每天执行的时间(比如凌晨2点,避开使用高峰)
- 填写命令:
pkill -f your_script_name.py; nohup python3 your_script_name.py > iss_tracker_log.txt 2>&1 & - 保存任务,这样每天会自动终止旧进程并启动新的脚本实例。
针对付费账户
付费账户无后台进程时长限制,只需完成上述前3步即可,无需设置每日重启任务。
二、外部API与邮件发送的注意事项
外部API使用注意事项
- 请求频率控制
确认所调用API的请求限制:open-notify.org和sunrise-sunset.org均为公开免费API,每分钟1次的请求频率完全合规,不会触发封禁。 - 异常处理优化
原脚本已使用response.raise_for_status()处理HTTP错误,但建议添加try-except块避免单次API请求失败导致脚本崩溃,示例:def is_iss_overhead(): try: response = requests.get(url="http://api.open-notify.org/iss-now.json") response.raise_for_status() data = response.json() iss_latitude = float(data["iss_position"]["latitude"]) iss_longitude = float(data["iss_position"]["longitude"]) return MY_LAT -5 <= iss_latitude <= MY_LAT +5 and MY_LONG -5 <= iss_longitude <= MY_LONG +5 except Exception as e: print(f"ISS API请求失败: {str(e)}") return False - 修正API判断逻辑
原脚本中is_iss_overhead函数的条件判断存在错误:经度范围误写为MY_LAT -5,正确逻辑应为当前经纬度±5度覆盖ISS位置,修正后条件如上例。
邮件发送注意事项
- 邮箱权限配置
- 若使用Gmail:需开启「第三方应用访问」(或两步验证下生成「应用专用密码」),否则会被拒绝登录。
- SMTP服务器与端口:确保使用正确配置,Gmail为
smtp.gmail.com:587,原代码已使用starttls()加密连接,符合要求。
- 修正代码错误
原脚本sendmail的to_addrs参数错误地填为MY_PASSWORD,需替换为目标邮箱地址(比如你的个人邮箱),否则邮件无法送达。 - 规范邮件代码
建议使用with语句管理SMTP连接,自动关闭连接避免资源泄漏:with smtplib.SMTP("smtp.gmail.com", 587) as connection: connection.starttls() connection.login(MY_EMAIL, MY_PASSWORD) connection.sendmail( from_addr=MY_EMAIL, to_addrs="your_target_email@example.com", msg="Subject:Look up!\n\nThe ISS is above you in the sky." ) - 避免垃圾邮件标记
邮件主题明确、内容简洁,使用正规发件邮箱,避免触发邮件服务商的垃圾邮件检测机制。 - PythonAnywhere邮件限制
免费账户每日发送邮件上限为500封,你的脚本触发条件极少,无需担心超限;付费账户限制更高。
内容的提问来源于stack exchange,提问作者jackson
相关产品推荐
相关产品推荐

