
Estoy escribiendo una aplicación con un marco de tipo cliente de servidor. Para implementar la lógica,
- Necesito transferir una carpeta comprimida a un servidor de Windows,
- descomprime la carpeta y
- luego ejecute un determinado archivo de Python dentro de la carpeta.
Estoy intentando recrear los pasos manualmente, para luego poder rehacerlos usando bibliotecas de Python (como paramiko
y zipfile
u otras bibliotecas de Python)
Hasta ahora he probado las siguientes pruebas para comprobar si puedo ejecutar de manera confiable un script de Python usando ssh:
Usando OpenSSH desde Windows 10: https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH Después de alguna configuración, pude copiar archivos del lado del cliente al servidor usando
scp
. El siguiente plan era usar ssh para ejecutar remotamente un archivo específico usandopython filename.py
Luego ingresé a la carpeta e intenté ejecutar python filename.py. Sin embargo, no hubo resultados de
python
.Luego probé MobaSSH y el problema fue el mismo que en la prueba con OpenSSH de Microsoft. `Error grave de Python: Py_Initialize: no se pueden inicializar los flujos estándar del sistema LookupError: codificación desconocida: cp28591
Hilo actual 0x00000874 (la llamada más reciente primero): `
De los 2 experimentos anteriores, inicialmente pensé que había un problema con mi instalación de Python. Así que inicié sesión directamente en la máquina y lo utilicé
cmd
para ejecutar el mismo archivo que,python filename.py
se ejecuta y produce los resultados esperados. Entonces Python funciona bien en la máquina con Windows.Mi siguiente hipótesis fue que es imposible ejecutar Python si se ejecuta a través de SSH. Para probar esto, inicié sesión en mi VM de Ubuntu e hice el mismo experimento. En este caso, Python funcionó bien, sin errores.
A partir de estos experimentos, parece que si inicio sesión en Windows usando ssh
e intento ejecutar Python, no puedo ejecutarlo, tal vez debido a una peculiaridad de Python o de Windows. Pero si inicio sesión directamente en Windows, puedo ejecutar bien el mismo script de Python. Además, parece que ssh funciona perfectamente en un entorno Linux.
Necesito ejecutar el script de Python en un entorno Windows, no en un entorno Linux debido a otras consideraciones. Entonces, aunque ejecutar el archivo de prueba funcionó bien en la máquina virtual de Ubuntu, no puedo usar ese entorno. .
¿Existe alguna forma de ejecutar un script de Python al iniciar sesión a través de SSH en un entorno Windows?
Respuesta1
Tuve cierto éxito con lo siguiente:
1.Después de iniciar sesión, inicie cmd.exe
cmd
2.Establezca una página de códigos, por ejemplo 850 (desde cmd.exe)
chcp 850
3.Establezca la RUTA y otras variables de entorno (desde cmd.exe)
set PATH=c:\Python27;c:\Python27\Scripts;C:\Program Files (x86)\...
set OTHER_VAR=...
Puede colocar los comandos chcp y configurar en un archivo por lotes que ejecute después de iniciar sesión.
Para averiguar los valores deseados, puede iniciar un shell cmd local en la máquina de destino o en otra máquina con Windows que sea lo suficientemente similar y ejecutar:
chcp
set
Para escribir todas las variables directamente en un archivo ejecutado en la máquina de destino desde un shell cmd local:
set >> myvars.cmd
Esto debe editarse manualmente para anteponer cada línea con un "conjunto" para crear un script que luego pueda ejecutar después de iniciar sesión de forma remota.
Incluso es posible iniciar sesión, iniciar ssh y ejecutar el script en una línea o en un script bash:
#!/bin/bash
ssh 10.1.1.100 -lwindowsuser 'cmd /K myvars.cmd'
El modificador /K de cmd ejecutará el siguiente comando (sin salir después de ejecutarlo).