Ich möchte mit den vlc player einen Stream speichern.
Mit den Nachfolgenden Befehl klappt das in der shell und auch als bash script, aber bei Python zeigt mir bei den Pfad 'invalid syntax' an.
Was kann ich hier verändern?
"os.system('sudo cvlc -vvv http://192.168.178.131:8080/?action=stream --sout file/ts:stream.mpg')"
os.system
Ich hab es jetzt mal mit den Befehl 'subprocess' probiert, aber der gleiche Fehler.
Hier meine Command line im Script:
Hier die Fehlermeldung von der shell beim Aufruf des scriptes:
pi@raspberrypi:~$ sudo python /home/pi/3.py File "/home/pi/3.py", line 6
File "/home/pi/3.py", line 6
Poppen ('sudo cvlc -vvv http://192.168.178.131:8080/?action=stream --sout file/test:s.mpg', shell=true)
^
SyntaxError: invalid syntax
Hier meine Command line im Script:
Code: Alles auswählen
Poppen ('sudo cvlc -vvv http://192.168.178.131:8080/?action=stream --sout file/test:s.mpg', shell=true)
pi@raspberrypi:~$ sudo python /home/pi/3.py File "/home/pi/3.py", line 6
File "/home/pi/3.py", line 6
Poppen ('sudo cvlc -vvv http://192.168.178.131:8080/?action=stream --sout file/test:s.mpg', shell=true)
^
SyntaxError: invalid syntax
@egon11: SyntaxError heißt, dass Du Dich nicht an die Grammatik von Python hältst, meist eine Klammer, ein Komma oder ähnliches vergessen hast. Dass das in der gezeigten Stelle entdeckt wird, heißt nicht, dass dort auch der Fehler liegt, sondern er liegt höchst wahrscheinlich in der Zeile davor. Daneben ist Poppen wahrscheinlich unbekannt, ebenso true; beim Programmieren muß man sich penibel an die korrekte Schreibweise halten. Als nächstes hat dir __deets__ empfohlen, das Kommando als Liste ohne `shell=True` zu übergeben. Das hat nicht nur den Vorteil, dass es sicherer ist, weil es keine Sonderzeichen gibt, die von der Shell falsch interpretiert werden könnten, sondern auch, dass Variablen, wie die URL, einfacher übergeben werden können.
@egon11: Wofür braucht ``cvlc`` eigentlich Root-Rechte? Das sollte nicht nötig sein!
Dateinamen für Python-Quelltexte sollte man so wählen, dass der Name vor dem ``.py`` ein gültiger Bezeichner in Python wäre, denn das ist ja der Modulname. `3` ist kein gültiger Bezeichner, also kann man das Modul beispielsweise nicht importieren. Aus anderen Modulen, zum Beispiel zum automatisierten Testen, oder um in einer interaktiven Python-Shell einzelne Funktionen aus dem Modul auszuprobieren.
Dateinamen für Python-Quelltexte sollte man so wählen, dass der Name vor dem ``.py`` ein gültiger Bezeichner in Python wäre, denn das ist ja der Modulname. `3` ist kein gültiger Bezeichner, also kann man das Modul beispielsweise nicht importieren. Aus anderen Modulen, zum Beispiel zum automatisierten Testen, oder um in einer interaktiven Python-Shell einzelne Funktionen aus dem Modul auszuprobieren.
Ok danke, es hat letztendlich bei den Verzeichnis "nur" die ' gefehlt.
So sieht jetzt mein kleines Script aus:
Hat jemand eine Idee wie es nach 2h automatisch wieder beendet wird?
Hab schon mit 'time.sleep' und anschließend mit 'sys.exit' versucht, aber erfolglos leider.
So sieht jetzt mein kleines Script aus:
Code: Alles auswählen
import time
import os
import subprocess
t = time.strftime('%H:%M:%S_%d.%m.%Y')
os.system("cvlc -vvv http://localhost:8080/?action=stream --sout file/ts:'/home/pi/hallo/%s.mpg'" %t)
Hab schon mit 'time.sleep' und anschließend mit 'sys.exit' versucht, aber erfolglos leider.
Dir wurde bereits geraten, das subprocess-Modul zu benutzen. Das ignorierst du fleissig, aber damit wuerde es gehen.
https://docs.python.org/2/library/subpr ... .terminate
https://docs.python.org/2/library/subpr ... .terminate
@egon11: cvlc könnte Probleme mit Deinen Doppelpunkten im Dateinamen haben. So bennent man Dateien auch nicht. Übliche Datumsschreibweise ist "YYYYmmdd_HHMMSS.mpg", dann kann man die Dateien auch ganz einfach nach Datum sortieren. Du importierst subprocess, benutzt es aber trotzdem nicht .
Hier mein Script:
Irgendetwas macht da fehler:
Code: Alles auswählen
import time
import os
import subprocess
subprocess.call("cvlc -vvv http://localhost:8080/?action=stream --sout file/ts:'/home/pi/video.mpg'")
Irgendetwas macht da fehler:
Code: Alles auswählen
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1335, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Zuletzt geändert von Anonymous am Donnerstag 17. August 2017, 20:14, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
@egon11: Die Syntax? Bitte sehr:
https://docs.python.org/3/library/subpr ... rocess.run
https://docs.python.org/3/library/subpr ... rocess.run
Code: Alles auswählen
p = subprocess.Popen(["kommando", "--option", "--option-mit-argument=foo"])
...
p.kill()
Ich bräuchte nur mal einen Denkanstoß, kann ich mein komando ("cvlc -vvv http://localhost:8080/?action=stream --sout file/ts:'/home/pi/video.mpg'") so lassen in der Liste, oder muss ich den auch einzeln aufsplitten?
Versuch mal länger als 2 Sekunden auf die Beispiele zu gucken. Vielleicht erkennst du dann ein Muster darin, das deine Frage beantworten könnte...egon11 hat geschrieben:kann ich mein komando ("cvlc -vvv http://localhost:8080/?action=stream --sout file/ts:'/home/pi/video.mpg'") so lassen in der Liste, oder muss ich den auch einzeln aufsplitten?