Argumentos de subproceso Python

Por ejemplo, estoy usando ffplay y quiero ejecutar este comando -bufsize[:stream_specifier] integer (output,audio,video)

En el momento tengo esto:

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

Pero esto dice que no es válido.

Como lo mencionó JBernardo en un comentario, separe el "-bufsize 4096" en dos, "-bufsize", "4096" . Cada argumento debe separarse cuando se utiliza subprocess.call con shell=False (el 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ásela directamente; de ​​lo contrario, llame a str(url) para obtener una representación de cadena.

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) 

Si bien el uso de shlex.split() es excesivo para su caso de uso, muchos de los comentarios parecen estar preguntando sobre el uso de espacios en los parámetros en los casos en que un CLI le permite pasar cadenas entre comillas que contienen espacios (es decir, git commit -m "Commit message here" ).

Aquí hay una función rápida de python que se puede usar para ejecutar comandos que incluyen parámetros con espacios:

 import shlex, subprocess def run_command( command ): subprocess.call(shlex.split(command))