#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()