簡體   English   中英

在啟動樹莓派時運行 python 腳本時出現問題

[英]Problem running python script at boot raspberry pi

我的腳本在啟動時遇到了很多麻煩,我嘗試了無數方法並花了幾個小時試圖讓它工作。

我有一個需要在啟動時運行的 python 腳本。 但是,它需要訪問互聯網,所以我必須等待網絡。

在我嘗試過的幾個教程中,我嘗試了很多方法,使用 crontab,使用 systemd 和 rc.local 提供服務,但是這些都沒有奏效。

我能夠工作的唯一方法是執行 a.desktop Desktop Entry,但這僅在我插入外接顯示器時才對我有用,並且我的樹莓派將在沒有顯示器的情況下運行。

此外,我能夠使用 service 方法運行我的腳本,現在使用 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 時可能會或可能不會啟動,但是第二個“找不到命令”是問題所在,如果那段代碼沒有被執行,我的程序不會工作。

那里的任何人都可以幫助我解決這個問題嗎?

代替:

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 服務器直到成功 - 在本例中為 Google。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM