programa - ¿Cómo se ejecutan las secuencias de comandos de Python en Windows?
manual de python para arcgis (8)
¿Cómo se ejecutan las secuencias de comandos de Python en Windows?
Puede instalar pylauncher . Se utiliza para iniciar archivos .py, .pyw, .pyc, .pyo y es compatible con varias instalaciones de Python:
T/:> blah.py argument
Puede ejecutar su secuencia de comandos de Python sin especificar la extensión .py si tiene .py, .pyw en la variable de entorno PATHEXT:
T:/> blah argument
Agrega soporte para shebang ( #!
Header line) para seleccionar la versión de Python deseada en Windows si tiene múltiples versiones instaladas. ¡Podría usar el sintaxis #! /usr/bin/env python
nix compatible #! /usr/bin/env python
#! /usr/bin/env python
.
Puede especificar la versión explícitamente, por ejemplo, para ejecutar utilizando la última versión de Python 3 instalada:
T:/> py -3 blah.py argument
También debería arreglar su problema sys.argv
como un efecto secundario.
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 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 RUTA.
python.exe es el programa predeterminado para ejecutar archivos * .py.
¿Cuál es el problema?
¿Puedes ejecutar python.exe desde cualquier mapa? Si no lo hace, compruebe si tiene los valores adecuados para python.exe en el entorno PATH
¿Estás en el mismo directorio que blah.py. Verifique esto emitiendo un comando -> edite blah.py y verifique si puede abrir este archivo
EDITAR:
En ese caso no puedes. ( python arg significa que usted llama python.exe con algunos parámetros que python supone que es el nombre de archivo del script que desea ejecutar)
Puede crear líneas de archivo de bat en su mapa de ruta y ejecutar el archivo .bat
Ejemplo:
En uno de los mapas de ruta cree blah.py.bat Editar archivo y poner línea
python C:/Somedir/blah.py
Ahora puede ejecutar blah.py desde cualquier lugar, ya que no necesita poner extensión .bat cuando ejecuta archivos bat.
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 derecho en la computadora
haga clic izquierdo en Propiedades
haga clic izquierdo en Configuración avanzada del sistema
haz 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 izquierdo en PATHEXT para resaltarlo
haz clic izquierdo en Editar ...
Edite "Variable value" para que contenga ;.PY
(la tecla End se saltará hasta el final)
haz clic izquierdo en OK
haz clic izquierdo en OK
haz clic izquierdo en OK
Nota n. ° 1: las ventanas de símbolo del sistema no verán el cambio sin que se cierre y se vuelva a abrir.
Nota n. ° 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:
before: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
después de .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
Aquí hay algunos comandos instructivos:
C:/>echo %pathext%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
C:/>assoc .py
.py=Python.File
C:/>ftype Python.File
Python.File="C:/Python32/python.exe" "%1" %*
C:/>assoc .pyw
.pyw=Python.NoConFile
C:/>ftype Python.NoConFile
Python.NoConFile="C:/Python32/pythonw.exe" "%1" %*
C:/>type c:/windows/helloworld.py
print("Hello, world!") # always use a comma for direct address
C:/>helloworld
Hello, world!
C:/>
Cuando ejecuta un script sin escribir "python" al frente, necesita saber dos cosas acerca de cómo Windows invoca el programa. Lo primero es averiguar qué tipo de archivo cree que es Windows:
C:/>assoc .py .py=Python.File
Luego, necesita saber cómo Windows está ejecutando cosas con esa extensión. Está asociado con el tipo de archivo "Python.File", por lo que este comando muestra lo que hará:
C:/>ftype Python.File Python.File="c:/python26/python.exe" "%1" %*
Entonces, en mi máquina, cuando escribo "blah.py foo", ejecutará este comando exacto, sin diferencias 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 escribe "blah.py foo". Ahora estás en posición de resolver el resto de tu 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 reciben sus preguntas y obtienen puntos de reputación, y más personas es probable que los ayuden con buenas respuestas.)
Traído de comentarios:
Incluso si assoc y ftype muestran la información correcta, es posible 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 %*
. Del mismo modo, establecer
HKEY_CLASSES_ROOT/py_auto_file/shell/open/command
al 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 registro puede variar, use python26.exe
o python.exe
o cualquiera que ya esté en el registro.
En Windows ,
Para ejecutar un módulo de Python sin escribir "python" ,
-> Haga clic derecho en cualquier archivo python (*. Py)
-> Establecer el abrir con propiedad a "python.exe"
-> Verifique "usar siempre este programa para este tipo de archivo"
-> Anexe la ruta de python.exe al entorno variable, por ejemplo, agregue C: / Python27 a la variable de entorno PATH.
Para ejecutar un módulo de python sin escribir la extensión ".py"
-> Editar la variable de sistema PATHEXT y anexar la extensión ".PY" a la lista.
Encontré una respuesta increíblemente útil here : ¿Cómo ejecutar diferentes versiones de Python en cmd?
Sugeriría usar la utilidad Python Launcher para Windows que introdujo en Python 3.3 hace un tiempo. También puede descargarlo e instalarlo directamente desde el sitio web del autor para usarlo con versiones anteriores de Python 2 y 3.
Independientemente de cómo lo obtenga, después de la instalación se asociará con todas las extensiones de archivo estándar de Python (es decir, archivos .py, .pyw, .pyc y .pyo). No solo podrá controlar explícitamente qué versión se utiliza en el símbolo del sistema, sino también script a script añadiendo los comentarios de Linux / Unix-y shebang #! / Usr / bin / env pythonX en el comienzo de tus scripts de Python.
Como sugiere JF Sebastian, Python Launcher para Windows es la mejor y más predeterminada opción para lanzar una versión diferente de Python en Windows. Solía ser una herramienta de terceros, pero ahora es oficialmente compatible desde Python 3.3.
Nuevo en la versión 3.3.
El lanzador de Python para Windows es una utilidad que ayuda en la ubicación y ejecución de diferentes versiones de Python. Permite que los scripts (o la línea de comandos) indiquen una preferencia para una versión específica de Python, y localizarán y ejecutarán esa versión.
¡Esta es una gran herramienta, solo úsala!
Me encontré con el mismo problema, pero en el contexto de la necesidad de paquete 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 en las máquinas de los usuarios de Windows para que puedan invocarlos desde la línea de comandos. Como el paquete es supuestamente fácil de usar, pedir a mis usuarios que cambien su registro para ejecutar estos scripts sería imposible.
Encontré una solución que las personas de Continuum usan para las secuencias de comandos de Python que vienen con su paquete Anaconda. Consulte ejemplos de su directorio Anaconda / Scripts.
Para una test
script de Python, cree dos archivos: test.bat
y test-script.py
.
test.bat
ve de la siguiente manera (los archivos .bat
en Anaconda/Scripts
llaman python.exe
con una ruta relativa que python.exe
para mis propósitos):
@echo off
set PYFILE=%~f0
set PYFILE=%PYFILE:~0,-4%-script.py
"python.exe" "%PYFILE%" %*
test-script.py
es tu script de Python real:
import sys
print sys.argv
Si deja estos dos archivos en su directorio local, puede invocar su script de Python a través del archivo .bat
haciendo
test.bat hello world
[''C://...//test-scripy.py'', ''hello'', ''world'']
Si copia ambos archivos en una ubicación que se encuentra en su PATH
(como Anaconda/Scripts
), puede incluso invocar el script .bat
sufijo .bat
test hello world
[''C://...Anaconda//Scripts//test-scripy.py'', ''hello'', ''world'']
Descargo de responsabilidad: no tengo idea de qué está pasando y cómo funciona esto, por lo que agradecería cualquier explicación.
debe hacer que la aplicación predeterminada para manejar archivos python sea python.exe.
haga clic derecho en un archivo * .py, seleccione el diálogo "Abrir con". Seleccione "python.exe" y marque "usar siempre este programa para este tipo de archivo" (algo así).
entonces tus archivos python siempre se ejecutarán usando python.exe