在 Raspberry pi 启动时难以启动 python 脚本
Difficulty with starting python script at boot on Raspberry pi
希望有人能提供帮助。我是 python 的新手,正在尝试在 raspbian 上启动脚本。我尝试的任何事情似乎都不起作用,只是看到我缺少的东西。一个非常基本的脚本,用于在收到 UDP 命令时播放音频文件。
到目前为止,我已经尝试过 - 从 rc.local 启动它,在 .bashrc 中启动它(当我通过 ssh 启动一个新终端时,这项工作有效,从 init.d 开始,下面是 init.d 脚本,.py 标准脚本是相同的减去初始化信息....
#! /usr/bin/python3
# /etc/init.d/UDP_Python_Omxplayer.py
### BEGIN INIT INFO
# Provides: UDP_Python_Omxplayer.py
# 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
import socket
import os
UDP_IP = "192.168.123.10"
UDP_PORT = 5005
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
print ("received message:", data)
command = str(data.decode('ASCII'))
if command == "Play":
os.system("omxplayer -o both --no-osd /home/pi/Doc*/Air*")
如上所述,脚本有效,我只是无法让它自动运行并且 运行 启动时进入后台?
提前致谢...
已尝试使用以下 cron 作业:
sudo crontab -e
并添加了
@reboot sudo python /home/pi/UDP_Python_Omxplayer.py
也已经将它变成了一项服务,如果我手动启动该服务,它就可以正常工作,但再次从启动时不会..
尝试创建服务。
打开shell并输入命令:sudo vi /etc/rc.local
这将打开一个包含以下详细信息的文件。
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
cd /home/pi/XXXXX/XXXXX && python3 my_script.py > /home/pi/Desktop/log.txt 2>&1
exit 0
提供脚本的路径并将 my_script.py 替换为您的脚本名称。保存并退出文件。
它还会将桌面上的 scipt 日志保存在 log.txt 文件中。
如果这不起作用修改您的脚本,如下所示。
#! /usr/bin/python3
# /etc/init.d/UDP_Python_Omxplayer.py
### BEGIN INIT INFO
# Provides: UDP_Python_Omxplayer.py
# 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
from time import sleep
sleep(45)
import socket
import os
UDP_IP = "192.168.123.10"
UDP_PORT = 5005
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
print ("received message:", data)
command = str(data.decode('ASCII'))
if command == "Play":
os.system("omxplayer -o both --no-osd /home/pi/Doc*/Air*")
希望有人能提供帮助。我是 python 的新手,正在尝试在 raspbian 上启动脚本。我尝试的任何事情似乎都不起作用,只是看到我缺少的东西。一个非常基本的脚本,用于在收到 UDP 命令时播放音频文件。
到目前为止,我已经尝试过 - 从 rc.local 启动它,在 .bashrc 中启动它(当我通过 ssh 启动一个新终端时,这项工作有效,从 init.d 开始,下面是 init.d 脚本,.py 标准脚本是相同的减去初始化信息....
#! /usr/bin/python3
# /etc/init.d/UDP_Python_Omxplayer.py
### BEGIN INIT INFO
# Provides: UDP_Python_Omxplayer.py
# 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
import socket
import os
UDP_IP = "192.168.123.10"
UDP_PORT = 5005
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
print ("received message:", data)
command = str(data.decode('ASCII'))
if command == "Play":
os.system("omxplayer -o both --no-osd /home/pi/Doc*/Air*")
如上所述,脚本有效,我只是无法让它自动运行并且 运行 启动时进入后台?
提前致谢...
已尝试使用以下 cron 作业:
sudo crontab -e
并添加了
@reboot sudo python /home/pi/UDP_Python_Omxplayer.py
也已经将它变成了一项服务,如果我手动启动该服务,它就可以正常工作,但再次从启动时不会..
尝试创建服务。
打开shell并输入命令:sudo vi /etc/rc.local 这将打开一个包含以下详细信息的文件。
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
cd /home/pi/XXXXX/XXXXX && python3 my_script.py > /home/pi/Desktop/log.txt 2>&1
exit 0
提供脚本的路径并将 my_script.py 替换为您的脚本名称。保存并退出文件。
它还会将桌面上的 scipt 日志保存在 log.txt 文件中。
如果这不起作用修改您的脚本,如下所示。
#! /usr/bin/python3
# /etc/init.d/UDP_Python_Omxplayer.py
### BEGIN INIT INFO
# Provides: UDP_Python_Omxplayer.py
# 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
from time import sleep
sleep(45)
import socket
import os
UDP_IP = "192.168.123.10"
UDP_PORT = 5005
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
print ("received message:", data)
command = str(data.decode('ASCII'))
if command == "Play":
os.system("omxplayer -o both --no-osd /home/pi/Doc*/Air*")