¿Cómo ejecutar scripts de Python en Windows?

Resuelto ton4eg asked hace 14 años • 9 respuestas

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 un argumento, pero si ejecuto el script mediante:

blah.py argument

se produce un error:

Error de índice...

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?

ton4eg avatar Dec 20 '09 09:12 ton4eg
Aceptado

Cuando ejecuta un script sin escribir "python" al principio, necesita saber dos cosas sobre cómo Windows invoca el programa. Lo primero es averiguar qué tipo de archivo cree Windows que es:

    C:\>asociación .py
    .py=Python.Archivo

A continuación, necesita saber cómo ejecuta Windows las cosas con esa extensión. Está asociado con el tipo de archivo "Python.File", por lo que este comando muestra lo que hará:

    C:\>ftipo Python.File
    Python.File="c:\python26\python.exe" "%1" %*

Entonces, en mi máquina, cuando escribo "blah.py foo", ejecutará este comando exacto, sin diferencia en los resultados que si hubiera escrito todo yo mismo:

    "c:\python26\python.exe" "blah.py" foo

Si escribe lo mismo, incluidas las comillas, obtendrá resultados idénticos a cuando simplemente escribe "blah.py foo". Ahora estás en condiciones de resolver el resto del problema por ti 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 votos positivos en sus preguntas, obtienen puntos de reputación y más personas probablemente les ayuden con buenas respuestas.)

Traído de los comentarios:

Incluso si assoc y ftype muestran la información correcta, puede suceder que los argumentos se eliminen. Lo que puede ayudar en ese caso es corregir directamente las claves de registro relevantes para Python. Selecciona el

HKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\command

clave para:

"C:\Python26\python26.exe" "%1" %*

Probablemente, anteriormente %*faltaba. De manera similar, establezca

 HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

al mismo valor. Consulte http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/

ejemplo de configuración de registro para python.exe HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\commandLa ruta del registro puede variar, usar python26.exeo python.exelo que ya esté en el registro.

ingrese la descripción de la imagen aquí HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

Peter Hansen avatar Dec 20 '2009 15:12 Peter Hansen

debe hacer que la aplicación predeterminada para manejar archivos Python sea python.exe.

haga clic derecho en un archivo *.py, seleccione el cuadro de diálogo "Abrir con". Allí seleccione "python.exe" y marque "usar siempre este programa para este tipo de archivo" (algo así).

entonces sus archivos de Python siempre se ejecutarán usando python.exe

santosc avatar Dec 20 '2009 02:12 santosc

¿Cómo ejecutar scripts de Python en Windows?

Podrías instalar pylauncher . Se utiliza para iniciar archivos .py, .pyw, .pyc, .pyo y admite múltiples instalaciones de Python:

T\:> blah.py argument

Puede ejecutar su secuencia de comandos Python sin especificar la extensión .py si tiene .py, .pyw en la variable de entorno PATHEXT:

T:\> blah argument

Agrega soporte para shebang ( #!línea de encabezado) para seleccionar la versión deseada de Python en Windows si tiene varias versiones instaladas. Podrías usar la sintaxis compatible con *nix #! /usr/bin/env python.

Puede especificar la versión explícitamente, por ejemplo, para ejecutarla con la última versión instalada de Python 3:

T:\> py -3 blah.py argument

También debería solucionar su sys.argvproblema como efecto secundario.

jfs avatar Oct 23 '2012 06:10 jfs

Encontré el mismo problema pero en el contexto de la necesidad de empaquetar mi código para usuarios de Windows (procedentes de Linux). Mi paquete contiene varios scripts con opciones de línea de comando.

Necesito que estos scripts se instalen en la ubicación adecuada de 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 un script de Python test, cree dos archivos: a test.baty a test-script.py.

test.battiene el siguiente aspecto (los .batarchivos en Anaconda\Scriptsllamada python.execon una ruta relativa que adapté para mis propósitos):

@echo off
set PYFILE=%~f0
set PYFILE=%PYFILE:~0,-4%-script.py
"python.exe" "%PYFILE%" %*

test-script.pyes su secuencia de comandos Python real:

import sys
print sys.argv

Si deja estos dos archivos en su directorio local, puede invocar su script Python a través del .batarchivo haciendo

test.bat hello world
['C:\\...\\test-scripy.py', 'hello', 'world']

Si copia ambos archivos a una ubicación que esté en su PATH(como Anaconda\Scripts), entonces puede incluso invocar su secuencia de comandos omitiendo el .batsufijo

test hello world
['C:\\...Anaconda\\Scripts\\test-scripy.py', 'hello', 'world']

Descargo de responsabilidad: no tengo idea de qué está pasando ni cómo funciona, por lo que agradecería cualquier explicación.

 avatar Nov 20 '2013 22:11