Код Raspberry Pi на python, запущенный из Thonny IDE, но не запускаемый с терминала

#python #python-3.x #raspberry-pi #python-multithreading

#python #python-3.x #raspberry-pi #python-многопоточность

Вопрос:

Я пытаюсь запустить три кода python из одного кода python. Однако код не запускается с терминала. Однако, когда я пытаюсь запустить его с помощью Thonny IDE, все коды выполняются отлично. Ниже приведен код, который я пытаюсь выполнить:

 #!/usr/bin/python3

import time
import threading
import os


def startProgram(i):
    if i==0 or i=='0':
        time.sleep(1)
        os.system("sudo python3 /home/pi/a.py")
        print("Create tunnel code executed")
    elif i==1 or i=='1':
        time.sleep(1)
        os.system("sudo python3 /home/pi/b.py")
        print("Create capture http code executed")
    elif i==2 or i=='2':
        time.sleep(1)
        os.system("sudo python3 /home/pi/c.py")
        print("Create mail transaction details code executed")
    else:
        print("Value not in range")
        pass

def main():
    for i in range(3):
        print(i)
        t = threading.Thread(target = startProgram, daemon=True, args=(i,))
        t.start()

if __name__=="__main__":
    main()
 

В терминале ошибка не выдается. Код просто запускается и завершается, но остальные 3 программы никогда не выполняются. Я пытаюсь выполнить код python в терминале с помощью следующей команды:

python3 startProgram.py

Кроме того, я протестировал все коды по отдельности, и они выполняются без каких-либо ошибок. Пожалуйста, дайте мне знать, где я ошибаюсь и как исправить проблему. Заранее спасибо.

Комментарии:

1. Попробуйте удалить «sudo» из каждого вызова os.system.

2. Попробовал, удалив «sudo». По-прежнему не выполняется с терминала.

3. Если ваши основные потоки завершатся и останутся только демонические потоки, программа завершит работу без должного внимания. Вы должны присоединиться к потокам в конце main() .

Ответ №1:

Поскольку все остальные скрипты .py, почему бы просто не импортировать их?

Предполагая startProgram.py находится в той же папке, что и другие ваши файлы —

 from time import sleep
from threading import Thread

import a, b, c


def startProgram(i):
    try:
        sleep(1)
        [a.main(), b.main(), c.main()][int(i)]
    except:
        print("Value not in range")

def main():
    for i in range(3):
        print(i)
        Thread(target = startProgram, daemon=True, args=(i,)).start()

if __name__ == "__main__":
    main()