Seite 1 von 1

programm mit Parameter starten

Verfasst: Mittwoch 6. Januar 2016, 20:57
von wasserflo
Hi,
ich versuche aus einem Python prg heraus zwei andere Programme zu starten.
Das eine funktioniert problemlos, das zweite nicht:

#!/usr/bin/env python

import subprocess

player = subprocess.Popen(["mplayer", "start.mp3"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
Prc_Stream = subprocess.Popen(["mjpg_streamer", "-i", "/usr/local/lib/input_uvc.so -n -y -f 10", "-o" "/usr/local/lib/output_http.so -w /usr/local/www"], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

Der mplayer startet problemlos, der mjpeg_streamer nicht.

Hat jemand eine Idee, warum das nicht geht?
Es kommt keine Fehlermeldung. Das aufrufende Python Programm läuft durch.

Gruß
Florian

Re: programm mit Parameter starten

Verfasst: Mittwoch 6. Januar 2016, 21:25
von /me
wasserflo hat geschrieben:

Code: Alles auswählen

Prc_Stream =  subprocess.Popen(["mjpg_streamer", "-i", "/usr/local/lib/input_uvc.so -n -y -f 10", "-o" "/usr/local/lib/output_http.so -w /usr/local/www"], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
Das sieht äußerst kurios aus. Du solltest schon alle Parameter als Liste von Argumenten angeben und nicht vereinzelt komplette Blöcke als String wie "/usr/local/lib/input_uvc.so -n -y -f 10". Zudem hast du hinter dem "-o" ein Komma vergessen wodurch die beiden aufeinander folgenden Strings automatisch verkettet werden und damit den Parameter "-o/usr/local/lib/output_http.so -w /usr/local/www" ergeben.

Re: programm mit Parameter starten

Verfasst: Donnerstag 7. Januar 2016, 00:02
von BlackJack
Und das ``shell=True`` hat da nix zu suchen.

Re: programm mit Parameter starten

Verfasst: Donnerstag 7. Januar 2016, 01:10
von cofi
Ich kann ausserdem empfehlen nicht moeglichst viel in eine Zeile zu packen und Leerzeichen zu benutzen, um den Aufruf lesbar zu halten, zB indem man nur ein Argument (des aufgerufenen Programms) pro Zeile benutzt - gilt gerade bei Pfadargumenten - oder sie logisch gruppiert.