Seite 1 von 1
OS.System Kommando liefert syntax Fehler
Verfasst: Samstag 6. Juni 2020, 22:21
von Jack_Rasp
Hallo zusammen,
ich versuche, einen Video-Stream einer USB Webcam aus einem Pythonskript heraus zu starten.
Code: Alles auswählen
import os
os.system('vlc --fullscreen v4l2:///dev/video0')
Das funktioniert erstmal soweit.
Da ich bei der Kamera das Bild spiegeln muss habe ich die VLC Kommandozeile entsprechend ergänzt:
Code: Alles auswählen
import os
os.system("vlc --video-filter='transform{type="vflip"}' --fullscreen v4l2:///dev/video0")
Jetzt kommt für die Zeile ein Syntax Fehler. Ich vermute, dass das mit den " und ' nicht klappt...
Muss ich da was beachten?
Schon mal Danke, wenn einer helfen kann!!
Gruß
Jack
Re: OS.System Kommando liefert syntax Fehler
Verfasst: Samstag 6. Juni 2020, 22:30
von Sirius3
Woher soll Python wissen, wann ein String aufhört, wenn in dem String " vorkommt?
os.system ist veraltet. Benutze subprocess.run:
Code: Alles auswählen
import subprocess
subprocess.run(["vlc", """--video-filter='transform{type="vflip"}'""", "--fullscreen", "v4l2:///dev/video0"])
Re: OS.System Kommando liefert syntax Fehler
Verfasst: Samstag 6. Juni 2020, 22:33
von __blackjack__
@Jack_Rasp: Wenn Du eine Zeichenkette mit " anfängst, dann ist das nächste vorkommen von einem " das Ende der Zeichenkette. Der Compiler kann da ja nun nicht irgendwie raten das es das in diesem Fall nicht sein so sein sollte. Aber grundsätzlich ist `os.system()` schon keine gute Idee. Um externe Programme zu starten gibt es das `subprocess`-Modul. Das sähe dann so aus (ungetestet):
Code: Alles auswählen
...
subprocess.run(
[
"vlc",
'--video-filter=transform{type="vflip"}',
"--fullscreen",
"v4l2:///dev/video0",
],
check=True,
)
Re: OS.System Kommando liefert syntax Fehler
Verfasst: Sonntag 7. Juni 2020, 00:23
von Jack_Rasp
Vielen dank schon mal für Eure Antworten!
Ich hatte schon vermutet, dass das mit den " in der " " -Zeichenfolge zu tun hatte.
Wenn ich Eure Trennung mit Kommas in den os.system Befehl übernehme, meckert er, dass 4 statt einem Argument angegeben sind.
Wenn ich Euren Ansatz mit dem Subprozess verfolge, klappt es leider an einer anderen Stelle nicht. Folgende Fehlermeldung kommt:
Code: Alles auswählen
subprocess.run(["vlc", """--video-filter='transform{type="vflip"}'""", "--fullscreen", "v4l2:///dev/video0"])
AttributeError: 'module' object has no attribute 'run'
Wie komme ich da jetzt weiter??
Danke!!
Gruß
Jack
Re: OS.System Kommando liefert syntax Fehler
Verfasst: Sonntag 7. Juni 2020, 00:37
von __blackjack__
@Jack_Rasp: Installiere eine neuere Python-Version‽ Die `run()`-Funktion gibt es seit Python 3.5 und das ist mittlerweile schon ziemlich alt. 5 Jahre und der Support dafür endet noch dieses Jahr.
Re: OS.System Kommando liefert syntax Fehler
Verfasst: Sonntag 7. Juni 2020, 13:22
von Jack_Rasp
Hallo tatsächlich läuft mein Programm unter Python 2.7.16.
Dort gibt es den run Befehl offensichtlich nicht.
Wenn ich das Programm unter python 3.7 laufen lasse, funktioniert die von Euch vorgeschlagene Lösung mit subprocess, ABER leider kann ich ADAFRUIT nicht mehr benutzen.
Das scheint wiederum in Python3 nicht erkannt zu werden.
Also nächstes Problem:
Weiß jemand, ob es ADAFRUIT (ich steuere damit ws2801 LED Streifen an) für Python 3 gibt und wie ich ihm das dann beibringe?
Gibt es vielleicht doch eine Möglichkeit die Problematik mit den " innerhalb der äußeren " " an os.system zu übergeben?
Meine Krücke jetzt: Ich habe ein zweites Skript mit dem subprocess für den VLC-Player, das ich mit python3 aufrufe. Wiederum über os.system aus meinem eigentlichen Programm.
in rearcam befindet sich wie gesagt Eure Lösung mit dem Subprocess.
Ja ich weiß... nicht elegant... maximal kreativ...
Vielen Dank schon mal!
Gruß
Jack
Re: OS.System Kommando liefert syntax Fehler
Verfasst: Sonntag 7. Juni 2020, 14:08
von Sirius3
Python2 ist schon seit langem durch Python3 ersetzt worden. Jetzt noch Programme damit zu schreiben, ist halt schwierig. Und natürlich gibt es die ws2801-Anbindung auch für Python3:
https://pypi.org/project/adafruit-circuitpython-ws2801/
Re: OS.System Kommando liefert syntax Fehler
Verfasst: Sonntag 7. Juni 2020, 14:20
von kbr
@Jack_Rasp: Python 2.7 bietet immerhin schon subprocess.call(), was in Deinem Fall ausreichen könnte. Wenn Du aber bei Python 2 bleibst, wirst Du immer wieder (und öfter) auf solche Schwierigkeiten stoßen.
Re: OS.System Kommando liefert syntax Fehler
Verfasst: Montag 8. Juni 2020, 20:47
von Jack_Rasp
Hallo,
stimmt subprocess.call geht in der 2.7er und funktioniert soweit.
Ich denke ich werde das mal auf Python3 umbauen, ist ja eigentlich nur ADAFRUIT, was ich neu installieren muss.
Nichtsdestotrotz: Für alle, die ein ähnliches Problem haben wie ich:
import os
Code: Alles auswählen
os.system ("vlc --video-filter=transform{type='vflip'} --fullscreen v4l2:///dev/video0")
Ich habe die " bei vflip durch ' ersetzt. Damit wird Anfang und Ende sauber erkannt.
So geht es dann auch mit os.system.
Die Kommandozeile streamt übrigens eine USB-Kamera über VLC im Vollbildmodus und spiegelt dabei das Bild. Stichwort Rückfahrkamera im Auto.
Danke für Eure Hilfe!
Gruß
Jack