Tengo un script simple blah.py (usando Python 2):
import sys
print sys.argv[1]
Si ejecuto mi script por:
python c:/..../blah.py argument
Imprime el argumento pero si ejecuto el script por:
blah.py argument
se produce un error:
IndexError ...
Entonces los argumentos no pasan al script.
python.exe en RUTA. Carpeta con blah.py también en PATH.
python.exe es el programa predeterminado para ejecutar archivos * .py.
¿Cuál es el problema?
Respuestas:
Cuando ejecuta un script sin escribir "python" al principio, necesita saber dos cosas sobre cómo Windows invoca el programa. Primero es averiguar qué tipo de archivo cree Windows que es:
A continuación, debe saber cómo Windows está ejecutando las cosas con esa extensión. Está asociado con el tipo de archivo "Python.File", por lo que este comando muestra lo que estará haciendo:
Entonces, en mi máquina, cuando escribo "blah.py foo", ejecutará este comando exacto, sin diferencia en los resultados que si hubiera escrito todo el texto yo mismo:
Si escribe lo mismo, incluidas las comillas, obtendrá resultados idénticos a cuando simplemente escribe "blah.py foo". Ahora está en condiciones de resolver el resto del problema por sí mismo.
(O publique más información útil en su pregunta, como copias reales de cortar y pegar de lo que ve en la consola. Tenga en cuenta que las personas que hacen ese tipo de cosas obtienen votaciones en sus preguntas, obtienen puntos de reputación y más personas es probable que les ayuden con buenas respuestas).
Traído de los comentarios:
Incluso si assoc y ftype muestran la información correcta, puede suceder que se eliminen los argumentos. Lo que puede ayudar en ese caso es arreglar directamente las claves de registro relevantes para Python. Selecciona el
clave para:
Probablemente, anteriormente,
%*
faltaba. Del mismo modo, establezcaal mismo valor. Ver http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command
La ruta de acceso puede variar, el usopython26.exe
o lapython.exe
o lo que ya está en el registro.HKEY_CLASSES_ROOT\py_auto_file\shell\open\command
fuente
assoc
yftype
muestra la información correcta, puede suceder que se eliminen los argumentos. Lo que puede ayudar en ese caso es arreglar directamente las claves de registro relevantes para Python. Establezca laHKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\command
clave en:"C:\Python26\python26.exe" "%1" %*
Probablemente, anteriormente,%*
faltaba. Del mismo modo, establezcaHKEY_CLASSES_ROOT\py_auto_file\shell\open\command
el mismo valor. Ver eli.thegreenplace.net/2010/12/14/…test.py 123
y me123
imprimen comosys.argv[1]
. ¿Microsoft cambió algo?debe hacer que la aplicación predeterminada para manejar archivos de Python sea python.exe.
haga clic con el botón derecho en un archivo * .py, seleccione el cuadro de diálogo "Abrir con". Allí, seleccione "python.exe" y marque "utilizar siempre este programa para este tipo de archivo" (algo así).
entonces sus archivos de Python siempre se ejecutarán usando python.exe
fuente
Además, si desea poder ejecutar sus scripts de Python sin escribir
.py
(o.pyw
) al final del nombre del archivo, debe agregar.PY
(o.PY;.PYW
) a la lista de extensiones en la variable de entorno PATHEXT.En Windows 7:
haga clic con el botón derecho en Computadora
, haga clic con el botón
izquierdo en Propiedades, haga clic con el botón izquierdo en Configuración avanzada del sistema
, haga clic con el botón izquierdo en la pestaña Avanzado, haga clic con el botón
izquierdo en Variables de entorno ...
en "variables del sistema", desplácese hacia abajo hasta que vea PATHEXT
, haga clic con el botón izquierdo en PATHEXT para resaltarlo a la
izquierda- haga clic en Editar ...
Editar "Valor de la variable" para que contenga
;.PY
(la tecla Fin saltará hasta el final)haga clic en Aceptar
, haga clic en Aceptar
, haga clic en Aceptar, haga clic en Aceptar
Nota n. ° 1: las ventanas del símbolo del sistema no verán el cambio sin que se cierren y vuelvan a abrir.
Nota # 2: la diferencia entre las extensiones
.py
y.pyw
es que la primera abre un símbolo del sistema cuando se ejecuta y la segunda no.En mi computadora, agregué
;.PY;.PYW
como las últimas extensiones (de menor prioridad), por lo que los valores "antes" y "después" de PATHEXT fueron:antes de:
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
después
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
Aquí hay algunos comandos instructivos:
fuente
Podría instalar pylauncher . Se utiliza para iniciar archivos .py, .pyw, .pyc, .pyo y admite múltiples instalaciones de Python:
Puede ejecutar su script de Python sin especificar la extensión .py si tiene .py, .pyw en la variable de entorno PATHEXT:
Agrega soporte para shebang (
#!
línea de encabezado) para seleccionar la versión deseada de Python en Windows si tiene varias versiones instaladas. Puede usar una sintaxis compatible con * nix#! /usr/bin/env python
.Puede especificar la versión explícitamente, por ejemplo, para ejecutar con la última versión instalada de Python 3:
También debería solucionar su
sys.argv
problema como efecto secundario.fuente
Encontré el mismo problema pero en el contexto de la necesidad de empaquetar mi código para usuarios de Windows (provenientes de Linux). Mi paquete contiene varios scripts con opciones de línea de comandos.
Necesito que estos scripts se instalen en la ubicación adecuada en las máquinas de los usuarios de Windows para que puedan invocarlos desde la línea de comandos. Como el paquete supuestamente es fácil de usar, sería imposible pedir a mis usuarios que cambien su registro para ejecutar estos scripts.
Encontré una solución que la gente de Continuum usa para los scripts de Python que vienen con su paquete Anaconda; consulte su directorio Anaconda / Scripts para ver ejemplos.
Para una secuencia de comandos de Python
test
, cree dos archivos: aytest.bat
atest-script.py
.test.bat
se ve como sigue (los.bat
archivos en laAnaconda\Scripts
llamadapython.exe
con una ruta relativa que adapté para mis propósitos):test-script.py
es su secuencia de comandos de Python real:Si deja estos dos archivos en su directorio local, puede invocar su script Python a través del
.bat
archivo haciendoSi copia ambos archivos en una ubicación que está en su
PATH
(comoAnaconda\Scripts
), puede incluso invocar su script omitiendo el.bat
sufijoDescargo de responsabilidad: no tengo idea de lo que está pasando y cómo funciona, por lo que agradecería cualquier explicación.
fuente
.bat
contenedor para cada script de Python es torpe y redundante. No recomendaría esto.En Windows ,
A ejecutar un módulo de Python sin escribir "python" ,
-> Haga clic derecho en cualquier archivo de python (*. Py)
-> Establezca la propiedad open with en "python.exe"
-> Marque la casilla "usar siempre este programa para este tipo de archivo"
-> Agregue la ruta de python.exe al entorno variable, por ejemplo, agregue C: \ Python27 a la variable de entorno PATH.
A ejecutar un módulo de Python sin escribir la extensión ".py"
-> Edite la variable de sistema PATHEXT y agregue la extensión ".PY" a la lista.
fuente
Encontré una respuesta increíblemente útil aquí : ¿Cómo ejecutar diferentes versiones de Python en cmd?
Como sugiere JF Sebastian, Python Launcher para Windows es la mejor opción predeterminada para lanzar diferentes versiones de Python en Windows. Solía ser una herramienta de terceros, pero ahora es oficialmente compatible desde Python 3.3.
¡Esta es una gran herramienta, solo úsala!
fuente
¿Puedes ejecutar python.exe desde cualquier mapa? Si no es así, compruebe si tiene los valores adecuados para python.exe en el entorno PATH
¿Está en el mismo directorio que blah.py. Verifique esto emitiendo el comando -> editar blah.py y verifique si puede abrir este archivo
EDITAR:
En ese caso no puedes. ( Python arg significa que usted llama a python.exe con algunos parámetros que python asume que es el nombre de archivo del script que desea ejecutar)
Puede crear un archivo bat con líneas en su mapa de ruta y ejecutar el archivo .bat
Ejemplo:
en uno de los mapas de ruta, cree el archivo de edición blah.py.bat y coloque la línea
Ahora puede ejecutar blah.py desde cualquier lugar, ya que no necesita poner extensión .bat al ejecutar archivos bat
fuente
Si eso es lo que entendí, es así:
COPIAR (no eliminar) python.exe y cambiar el nombre a py.exe y ejecutar:
fuente
Simplemente ejecute el comando:
Suponiendo que el nombre del archivo está dentro de la misma carpeta y Python ya se ha agregado a las variables de entorno.
fuente