启动时运行python脚本时出现问题raspberry pi

2024-06-01 00:32:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我在创业时的脚本遇到了很多麻烦,我尝试了无数种方法,花了数小时试图让它正常工作

我有一个启动时需要运行的python脚本。但是,它需要接入互联网,所以我不得不等待网络

在我使用crontab尝试的几个教程中,我尝试了许多方法,通过使用systemd和rc.local创建服务,但是这些方法都不起作用

我能够工作的唯一方法是使用.desktop桌面条目,但这只在插入外部监视器时对我有效,我的raspberry pi将在没有外部监视器的情况下运行

此外,我还可以使用服务方法运行脚本,现在使用rc.local

通过添加此行:

sudo bash -c '/usr/bin/python3 /home/pi/Projects/capstone/main.py > /home/pi/capstone.log 2>&1' &

但是,在我尝试运行的python脚本中,我有以下代码:

os.system("sudo killall servod")
time.sleep(1)   
os.system('sudo ~/PiBits/ServoBlaster/user/./servod')

由于某些原因,它没有正确运行我的脚本,因为我的日志中出现以下错误:

servod: no process found
sudo: /root/PiBits/ServoBlaster/user/./servod: command not found

第一个是预期的,因为我运行sudo killall servod时,它可能会启动,也可能不会启动,但第二个“Command not found”是问题所在,如果这段代码没有执行,我的程序就无法运行

有人能帮我解决这个问题吗


Tags: 方法代码脚本homeoslocalpisudo
3条回答

替换:

os.system('sudo ~/PiBits/ServoBlaster/user/./servod')

与:

os.system('sudo /home/pi/PiBits/ServoBlaster/user/./servod')
  1. 仔细检查路径并尝试使用绝对路径
  2. 确保您的脚本具有权限644

您还可以尝试将脚本复制到/etc/init.d,并将其作为init.d脚本运行。您确实需要将以下内容添加到脚本中:

### BEGIN INIT INFO
# Provides:          scriptname
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

sudo chmod +x <yourscript.py>
sudo update-rc.d <yourscript.py> defaults

您可以轻松等待python脚本中的网络的一种方法是ping服务器,直到在本例中成功

def wait_for_network():
    while os.system("ping -c 1 8.8.8.8") != 0:
        time.sleep(1)
    return

至于在启动时运行脚本,我建议编辑/etc/xdg/lxsession/LXDE-pi/autostart,并将python脚本以

@python3 home/pi/your_script.py

相关问题 更多 >