El sys.argv
es todo lo que obtuvo Python. El shell procesó la generación del nombre de archivo (globs), la expansión del parámetro (variable), las comillas y la división de palabras antes de pasar los argumentos al proceso python (en Unix; en Windows es el inicio realmente analizándolo, pero para la portabilidad, no puede confiar en ese).
Sin embargo, recuerde que las reglas de cotización de shell POSIX permiten pasar cualquier carácter que desee (excepto los bytes NUL que terminan cadenas).
Compare comenzar un proceso desde python usando subprocess.call con o sin el conjunto de argumentos shell
. Con shell=False
, la lista de cadenas es lo que aparece en el sys.argv
en el proceso iniciado (comenzando con la ruta del script, los parámetros procesados por python se eliminan) mientras que con shell=True
la cadena se pasa al intérprete que lo interpreta según sus propias reglas .
Ninguna de las respuestas proporcionadas hasta ahora aborda la pregunta original: En Unix, los argumentos de la línea de comando de origianl están en sys.argv. Son lo que tienes, sin embargo, en Windows, tienes una cadena de línea de comandos, donde se espera que cada aplicación haga su propio análisis. (Al revés: lo sé). Una respuesta a esta pregunta debería sugerir cómo obtener la cadena de línea de comando original, cuando corresponda. – Arafangion