2012-07-27 15 views
8

Por ejemplo, yo estoy usando ffplay y desea ejecutar este comando -bufsize[:stream_specifier] integer (output,audio,video)argumentos de Python subproceso

En el momento en que tienen esta:

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

Pero esto dice que no es válido.

+11

'' 4096' -bufsize' y se debe separar – JBernardo

Respuesta

12

Como mencionó JBernardo en un comentario, separe el argumento "-bufsize 4096" en dos, "-bufsize", "4096". Cada argumento debe separarse cuando se usa subprocess.call con shell=False (valor predeterminado). También puede especificar shell=True y dar el comando completo como una sola cadena, pero esto no se recomienda debido a posibles vulnerabilidades de seguridad.

No debería necesitar usar el formato de cadena donde tiene "%s" % url. Si url es una cadena, páselo directamente; de ​​lo contrario, llame al str(url) para obtener una representación de cadena.

3

Este es el camino a seguir:

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

'¿Qué pasa si url' contiene espacios? –

+0

obviamente no funcionaría. – Fabrizio

+3

Ese fue mi punto, que este no es "el camino a seguir" porque es bastante frágil. –

Cuestiones relacionadas