Python subprocess blocking main thread?
Damit meine Kamera auf dem Raspberry funktioniert gibt es einen Befehl:
raspistill -t 0 -n -w 4056 -h 3040 -s -o -
-s steht dafür dass der Prozess auf ein Signal (-SIGUSR) wartet um ein Bild zu schießen.
-o - steht dafür dass das Bild in den std buffer geschrieben wird
Ich möchte nun in meinem Pythonscript den raspistill befehl ausführen und auf den buffer zugreifen. Ich habe bereits einiges ausprobiert mit zB subprocess.call aber der befehlt raspistill blockiert meine main.
Hat irgendjemand eine Idee wie ich parallel den raspistill befehl ausführe und in einem bestimmten Zeitabstand das Signal -SIGUSR schicke und den stdout abgreife?
1 Antwort
Hast Du capture_stdout=True mitübergeben?
Ggf. ist es in dem Fall leichter direkt Popen zu nutzen. Dann würdest Du mit signal eben SIGUSR senden und anschließend Popen.communicate. Du könntest auch direkt den Stream lesen.
Oder Du nimmst einen anderen Ansatz, indem Du raspistill nicht von Python aus startest:
raspistill .... -o- | pythoncript
So ist der STDIN des Scriptes direkt an den STDOUT von rapistill gebunden. Wenn Du STDIN also nicht anderweitig benötigst, wäre das auch eien Option.
Und zu guter letzt könntest DU noch ne Named Pipe verwenden in die Raspistill auf sigusr schreibt und dann diese einfach mit dem Pythonscript auslesen.