Сценарий Python, расположенный в rc.local на Raspbian, не запускается при запуске - PullRequest
0 голосов
/ 02 марта 2019

Это мой скрипт на Python (main.py):

#! /usr/bin/env python
import time

# ..... some file imports from the same folder .....

try:
    # .... Some setup code

    while True:
        if turnOffRequestHandler.turnOffIsRequested():
            break;
        time.sleep(1)

except BaseException as e:
    pass
finally:
    # ..... Some code to dispose resources

И способ, которым я пытаюсь вызвать его при каждом запуске, состоял в том, чтобы сначала отредактировать 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
python3 /home/pi/Desktop/ProjectFolder/sample/main.py &
exit 0

и затем сделайте мой скрипт Python исполняемым, перейдя в каталог, в котором он находится, и выполнив следующую команду:

chmod 755 main.py

И затем я ожидал, что после перезагрузки системы мой скрипт запустится,Я не могу сказать, работает ли он или нет.Что я могу сказать, так это то, что i t должен вызывать некоторые конечные точки сети .Теперь мне интересно, действительно ли он был запущен, но Wi-Fi просто еще не подключился.

Как я могу это диагностировать?Потому что, когда я пытаюсь выполнить вручную (после загрузки системы и подключения Wi-Fi), например:

pi@raspberrypi:~ $ /etc/rc.local

он запускается, и все работает, как ожидалось.

РЕДАКТИРОВАТЬ: Возможно ли, что-то связано с тем, что скрипт, который я пытаюсь выполнить, ссылается внутри него на файлы, которые находятся в той же папке (которая отличается от / etc / ..)?.

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

вы можете перенаправить вывод (например, напечатать «что-то») в файл при использовании скрипта.измените ваш скрипт следующим образом:

python3 /home/pi/Desktop/ProjectFolder/sample/main.py &> logfile.txt

и в вашем файле используйте обычную печать для печати в вашем файле с 1 проблемой.вы должны очистить вывод во время работы вашего кода, чтобы увидеть выходной файл:

import sys
sys.stdout.flush()

edit

, если вы используете Python 3.3 или выше, тамальтернативный подход - print имеет аргумент для сброса вывода.

0 голосов
/ 02 марта 2019

Я бы попробовал простой bash-скрипт с 'echo "что-то" >> to_file'.

...