Seite 1 von 2
os.system
Verfasst: Mittwoch 16. August 2017, 20:52
von egon11
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')"
Re: os.system
Verfasst: Mittwoch 16. August 2017, 20:54
von darktrym
Mal abgesehen davon das man hier auch Tags kennt, was für ein Programm soll denn clvc sein?
Re: os.system
Verfasst: Mittwoch 16. August 2017, 21:08
von egon11
cvlc ist doch der Terminal befehl für vlc.
Re: os.system
Verfasst: Mittwoch 16. August 2017, 22:03
von __deets__
Vergiss das es Os.system gibt. Benutz subprocess.call und eine explizite Liste von Argumenten. Und bitte poste den kompletten Fehler. Irgendein SynaxError ist zu unspezifisch.
Re: os.system
Verfasst: Donnerstag 17. August 2017, 04:54
von egon11
Ich hab es jetzt mal mit den Befehl 'subprocess' probiert, aber der gleiche Fehler.
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)
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
Re: os.system
Verfasst: Donnerstag 17. August 2017, 06:32
von Sirius3
@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.
Re: os.system
Verfasst: Donnerstag 17. August 2017, 08:53
von BlackJack
@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.
Re: os.system
Verfasst: Donnerstag 17. August 2017, 17:00
von egon11
Ok danke, es hat letztendlich bei den Verzeichnis "nur" die ' gefehlt.
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)
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.
Re: os.system
Verfasst: Donnerstag 17. August 2017, 17:03
von __deets__
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
Re: os.system
Verfasst: Donnerstag 17. August 2017, 17:33
von Sirius3
@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

.
Re: os.system
Verfasst: Donnerstag 17. August 2017, 19:53
von egon11
Hier mein Script:
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
Re: os.system
Verfasst: Donnerstag 17. August 2017, 20:12
von BlackJack
@egon11: Ja Du.

Re: os.system
Verfasst: Donnerstag 17. August 2017, 20:19
von egon11
@ BlackJack
Könntest mir sagen ob das an meiner command line liegt, oder am Befehl?
Re: os.system
Verfasst: Donnerstag 17. August 2017, 20:33
von Sirius3
@egon11: die Argumente müssen als Liste übergeben werden.
Re: os.system
Verfasst: Donnerstag 17. August 2017, 20:38
von egon11
Heißt das den kompletten Befehl in []?
Re: os.system
Verfasst: Freitag 18. August 2017, 16:37
von egon11
Könnte mir jemand vielleicht mal auf die Sprünge helfen wie da die Syntax aussehen muss?
Re: os.system
Verfasst: Freitag 18. August 2017, 16:53
von kbr
Re: os.system
Verfasst: Freitag 18. August 2017, 16:54
von __deets__
Code: Alles auswählen
p = subprocess.Popen(["kommando", "--option", "--option-mit-argument=foo"])
...
p.kill()
Beispiele finden sich hier im Forum aber auch zu Hunderten. Ein bisschen Eigeninitiative führt auch zum ziel.
Re: os.system
Verfasst: Samstag 19. August 2017, 09:22
von egon11
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?
Re: os.system
Verfasst: Samstag 19. August 2017, 09:35
von snafu
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?
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...