2012-07-27 10 views
8

Na przykład używam ffplay i chcesz uruchomić to polecenie -bufsize[:stream_specifier] integer (output,audio,video)argumenty Pythona podproces

W tej chwili mam to:

subprocess.call(["ffplay", "-vn", "-nodisp","-bufsize 4096", "%s" % url]) 

Ale to mówi, że to nieważne.

+11

'' 4096' -bufsize' i powinny być oddzielone – JBernardo

Odpowiedz

12

Jak wspomniał JBernardo w komentarzu, oddzielić argument "-bufsize 4096" na dwa, "-bufsize", "4096". Każdy argument musi być oddzielony, gdy subprocess.call jest używany z (domyślnie). Można również podać wartość shell=True i podać całe polecenie jako pojedynczy ciąg, ale nie jest to zalecane ze względu na potencjalne luki w zabezpieczeniach.

Nie powinieneś używać formatowania ciągów, gdzie masz "%s" % url. Jeśli url jest łańcuchem, przekaż go bezpośrednio, w przeciwnym razie wywołaj str(url), aby uzyskać reprezentację ciągów.

3

To jest do zrobienia:

url = 'http://www.whatever.com' 
cmd = 'ffplay -vn -nodisp -bufsize 4096 '.split() 
subprocess.call(cmd + [str(url)], shell=False) 
+0

Co jeśli 'url' zawiera spacje? –

+0

to oczywiście nie działa. – Fabrizio

+3

To było moje stwierdzenie, że nie jest to "droga do wyjścia", ponieważ jest raczej krucha. –