You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PythonAnywhere上全天候运行ISS追踪Python脚本?

在PythonAnywhere上持续运行ISS追踪脚本的指南

一、如何设置脚本无限运行

针对免费账户(有24小时后台进程限制)

  1. 上传脚本
    登录PythonAnywhere后,进入「Files」标签页,点击「Upload a file」上传本地脚本;或者在「Code」标签页新建文件,直接粘贴代码。
  2. 安装依赖
    进入「Consoles」标签页,打开Bash控制台,运行命令:
    pip install requests --user
    
    确保requests库安装成功(脚本依赖该库调用API)。
  3. 启动后台进程
    在Bash控制台运行命令,让脚本后台运行并记录日志:
    nohup python3 your_script_name.py > iss_tracker_log.txt 2>&1 &
    
    其中your_script_name.py替换成你的脚本文件名,日志会写入iss_tracker_log.txt,方便后续排查问题。
  4. 设置每日重启任务
    由于免费账户后台进程会在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使用注意事项

  1. 请求频率控制
    确认所调用API的请求限制:open-notify.org和sunrise-sunset.org均为公开免费API,每分钟1次的请求频率完全合规,不会触发封禁。
  2. 异常处理优化
    原脚本已使用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
    
  3. 修正API判断逻辑
    原脚本中is_iss_overhead函数的条件判断存在错误:经度范围误写为MY_LAT -5,正确逻辑应为当前经纬度±5度覆盖ISS位置,修正后条件如上例。

邮件发送注意事项

  1. 邮箱权限配置
    • 若使用Gmail:需开启「第三方应用访问」(或两步验证下生成「应用专用密码」),否则会被拒绝登录。
    • SMTP服务器与端口:确保使用正确配置,Gmail为smtp.gmail.com:587,原代码已使用starttls()加密连接,符合要求。
  2. 修正代码错误
    原脚本sendmail的to_addrs参数错误地填为MY_PASSWORD,需替换为目标邮箱地址(比如你的个人邮箱),否则邮件无法送达。
  3. 规范邮件代码
    建议使用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."
        )
    
  4. 避免垃圾邮件标记
    邮件主题明确、内容简洁,使用正规发件邮箱,避免触发邮件服务商的垃圾邮件检测机制。
  5. PythonAnywhere邮件限制
    免费账户每日发送邮件上限为500封,你的脚本触发条件极少,无需担心超限;付费账户限制更高。

内容的提问来源于stack exchange,提问作者jackson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 07:09:53