Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Umí někdo programovat v Pythonu?

Ahoj, jsem zatím začátečník a vyrobil jsem si z Raspberry Pi videochůvičku... Otevírám z masterscriptu druhý skript a potřebuju, aby ten první (master) počkal, až ten volaný doběhne... Napadlo mě využít třídu Popen a udělal jsem to takto (inkriminované místo tučně a kurzívou):

#!/usr/bin/python
import RPi.GPIO as GPIO   
import time  
import os.path
import subprocess
from gpiozero import MotionSensor
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)    
GPIO.setup(4, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(17, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(24, GPIO.OUT)

pir = MotionSensor(4)
zapnuto = GPIO.input(17)
pohyb = GPIO.input(4)

while zapnuto == False:
        pohyb = GPIO.input(4)
        if pohyb == True:
                print("Pohyb_bezAlertu")
                time.sleep(5)
                if pir.wait_for_motion(timeout=10):
                        print("Alert")
                        [b][i]import subprocess
                        process = subprocess.Popen("/home/pi/Alert+Zvuk.py", shell=True)
                        process.wait()[/i][/b]
                
                else:
                        if os.path.isfile('active') == True:
                                time.sleep(300)
                                os.remove('active')
                                GPIO.output(23, False)
                                GPIO.output(24, False)

Na Python komunitě na face jsem dostal ještě radu na řádek, kde se volá druhý script následovnou:

process = subprocess.Popen("home/po/Alert+Zvuk.py",shell=True,stdin = subprocess.PIPE,stderr = subprocess.PIPE,stdout = subprocess.PIPE)

Ale obě varianty stejný výsledek. Chybu žádnou nehodí, ani syntaxe, ani Traceback, druhý script není spuštěn a smička "while" pokračuje dál, čili zase čeká na pohyb... Už fakt nevím jak na to. Můžu tam samozřejmě prásknout klasický "call" a pak time.sleep(Přibližný_čas_volaného_scriptu), ale to asi nejsou nejlepší programovací návyky...

Díky moc za případnou odpověď.

Pre vkladanie kódu používajte tag 'code' a nie 'quote', aby ste zachovali odsadenie. (moose)

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Tak nakonec vyřešeno, poradil mi Malajec na Python skupině na face. Pokud by někdy někdo potřeboval,… poslední
Roker 24.10.2018 21:38
Roker

Tak nakonec vyřešeno, poradil mi Malajec na Python skupině na face.
Pokud by někdy někdo potřeboval, tak docela elegantní řešení je, si druhý (volaný) script na začátku celý zadefinovat jako funkci a v master scriptu postupovat importem skriptu a volání funkce.

Master script = Script1.py
Volaný script = Script2.py
Ve Script2 zadám na začátku def NazevFunkce ():
a zbytek odsadim, aby byla dodrzena syntaxe

Ve Script1, v miste, kde potrebuju provest Script2 a pockat na jeho konec zadam jednoduse:

from Script2 import NazevFunkce
NazevFunkce()

Funkce se musí provést celá, takže scrip1 čeká na její dokončení. Rychlé, snadné, elegantní.

Pokud jsem někde doj..al syntaxi, omlouvám se, datlím to z mobilu po paměti...
Třeba někomu někdy pomůže.

Zpět do poradny Odpovědět na původní otázku Nahoru