programm mit Parameter starten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
wasserflo
User
Beiträge: 8
Registriert: Montag 4. Januar 2016, 20:08

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
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
BlackJack

Und das ``shell=True`` hat da nix zu suchen.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
Antworten