처음에는 나쁜 영어로 유감입니다.Windows에서 컴파일하는 데 실패했습니다 py2exe를 사용하는 간단한 python 스크립트
나는 Mikortik RB750에 연결하고 SSH로 명령을 실행하는 스크립트를 만들었습니다. (컴파일하지 않고) 실행할 때 제대로 작동하고 목적을 충족시킵니다. 내가 가지고있는 문제는 Windows에서 컴파일하려고 할 때 실패한다는 것입니다. SSH 연결을 실행하려고 시도 할 때까지 잘 작동합니다.
명령을 사용하여 컴파일하려고합니다. python -m py2exe.build_exe ssh_menu.py
4 개의 모듈이 누락되었다고 알려줍니다. UserDict; gssapi; 포장; readline. 이 문제를 해결하는 방법을 모르겠다. Google을 많이 사용해 봤지만, 파이썬으로 무언가를하려고 시도한 것은 처음이다. 이제는 길을 잃어 버렸다.
import os
import sys
import time
import select
import paramiko
server, username, password = ('192.168.88.1', 'admin', '976431')
comando1=" "
comando2=" "
ipUbicacion=" "
flagUbicacion=True
ipSalida=" "
flagSalida=True
addresList1=" "
miIp=input("Cual es su dirección IP: ")
while flagUbicacion:
print("""
1.ESSO Centro
2.ESSO Rotonda
3.Casa Don Oscar/Sebastian
4.Transporte Garay
5.Salir
""")
idUbicacion=input("Cual es su ubicación? ")
if idUbicacion=="1":
ipUbicacion="192.168.88.1"
flagUbicacion=False
elif idUbicacion=="2":
ipUbicacion="192.168.88.2"
flagUbicacion=False
elif idUbicacion=="3":
ipUbicacion="192.168.88.3"
flagUbicacion=False
elif idUbicacion=="4":
ipUbicacion="192.168.88.4"
flagUbicacion=False
elif idUbicacion=="5":
print("\n Programa Terminado")
idUbicacionans = None
else:
print("\n El dato ingresado no es valido")
while flagSalida:
print("""
1.Modem ESSO Centro
2.Integra ESSO Centro
3.Modem ESSO Rotonda
4.Modem Casa Don Oscar
5.10+ Transporte Garay
6.GampelCom Transporte Garay
7.Salir
""")
idSalida=input("Por cual puerta de enlace quiere salir? ")
if idSalida=="1":
ipSalida="192.168.88.1"
auxUbicacion="1"
flagSalida=False
elif idSalida=="2":
ipSalida="192.168.88.1"
auxUbicacion="1"
flagSalida=False
elif idSalida=="3":
ipSalida="192.168.88.2"
auxUbicacion="2"
flagSalida=False
elif idSalida=="4":
ipSalida="192.168.88.3"
auxUbicacion="3"
flagSalida=False
elif idSalida=="5":
ipSalida="192.168.88.4"
auxUbicacion="4"
flagSalida=False
elif idSalida=="6":
ipSalida="192.168.88.4"
auxUbicacion="4"
flagSalida=False
elif idSalida=="7":
print("\n Programa Terminado")
idSalida = None
flagSalida=False
else:
print("\n El dato ingresado no es valido")
if ipUbicacion==ipSalida:
cantComandos=1
else:
cantComandos=2
i=0
while i<cantComandos:
if idUbicacion=="1": #SI ESTOY EN LA ESSO DEL CENTRO Y...
if idSalida=="1": #...QUIERO SALIR POR EL MODEM
addresList1="WAN1"
elif idSalida=="2": #...QUIERO SALIR POR EL INTEGRA
addresList1="WAN2"
elif idSalida=="3": #...QUIERO SALIR POR RB_ROTONDA
addresList1="WAN3"
elif idSalida=="4": #...QUIERO SALIR POR RB_OSCAR
addresList1="WAN4"
elif idSalida=="5": #...QUIERO SALIR POR RB_TRANSPORTE
addresList1="WAN5"
elif idSalida=="6": #...QUIERO SALIR POR RB_TRANSPORTE
addresList1="WAN5"
if idUbicacion=="2": #SI ESTOY EN LA ESSO DE LA ROTONDA Y...
if idSalida=="1": #...QUIERO SALIR POR RB_CENTRO
addresList1="WAN2"
elif idSalida=="2": #...QUIERO SALIR POR RB_CENTRO
addresList1="WAN2"
elif idSalida=="3": #...QUIERO SALIR POR MODEM ROTONDA
addresList1="WAN1"
elif idSalida=="4": #...QUIERO SALIR POR RB_OSCAR
addresList1="WAN3"
elif idSalida=="5": #...QUIERO SALIR POR RB_TRANSPORTE
addresList1="WAN4"
elif idSalida=="6": #...QUIERO SALIR POR RB_TRANSPORTE
addresList1="WAN4"
if idUbicacion=="3": #SI ESTOY EN LA CASA DE OSCAR Y...
if idSalida=="1": #...QUIERO SALIR POR RB_CENTRO
addresList1="WAN2"
elif idSalida=="2": #...QUIERO SALIR POR RB_CENTRO
addresList1="WAN2"
elif idSalida=="3": #...QUIERO SALIR POR RB_ROTONDA
addresList1="WAN3"
elif idSalida=="4": #...QUIERO SALIR POR MODEM OSCAR
addresList1="WAN1"
elif idSalida=="5": #...QUIERO SALIR POR RB_TRANSPORTE
addresList1="WAN4"
elif idSalida=="6": #...QUIERO SALIR POR RB_TRANSPORTE
addresList1="WAN4"
if idUbicacion=="4": #SI ESTOY EN TRANSPORTE Y...
if idSalida=="1": #...QUIERO SALIR POR RB_CENTRO
addresList1="WAN3"
elif idSalida=="2": #...QUIERO SALIR POR RB_CENTRO
addresList1="WAN3"
elif idSalida=="3": #...QUIERO SALIR POR RB_ROTONDA
addresList1="WAN4"
elif idSalida=="4": #...QUIERO SALIR POR RB_OSCAR
addresList1="WAN5"
elif idSalida=="5": #...QUIERO SALIR POR 10+ TRANSPORTE
addresList1="WAN1"
elif idSalida=="6": #...QUIERO SALIR POR GAMPELCOM TRANSPORTE
addresList1="WAN2"
if i==0:
server=ipUbicacion
while True:
print ("Conectando a "+server+": Intento "+repr(i)+" de 10")
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(server, username=username, password=password)
print ("Conectado a "+server)
break
except paramiko.AuthenticationException:
print ("Fallo de autentificación conectando a "+server)
except:
print ("Fallo de SSH en "+server+", esperando que se inicie")
i += 1
time.sleep(1)
if i == 10:
print ("No se pudo conectar a "+server+". Conexión cancelada") % server
ssh.exec_command('ip firewall address-list remove [find where address="'+miIp+'"]')
ssh.exec_command('ip firewall address-list add list="'+addresList1+'" address="'+miIp+'"')
print('ip firewall address-list add list="'+addresList1+'" address="'+miIp+'"')
print ("Comando ejecutado, cerrando conexión SSH")
ssh.close()
time.sleep(1)
else:
server=ipSalida
while True:
print ("Conectando a "+server+": Intento "+repr(i)+" de 10")
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(server, username=username, password=password)
print ("Conectado a "+server)
break
except paramiko.AuthenticationException:
print ("Fallo de autentificación conectando a "+server)
except:
print ("Fallo de SSH en "+server+", esperando que se inicie")
i += 1
time.sleep(1)
if i == 10:
print ("No se pudo conectar a "+server+". Conexión cancelada") % server
ssh.exec_command('ip firewall address-list remove [find where address="'+miIp+'"]')
ssh.exec_command('ip firewall address-list add list="'+addresList1+'" address="'+miIp+'"')
print('ip firewall address-list add list="'+addresList1+'" address="'+miIp+'"')
print ("Comando ejecutado, cerrando conexión SSH")
ssh.close()
time.sleep(1)
idUbicacion=auxUbicacion
i=i+1
답장을 보내 주셔서 감사합니다.하지만 여전히 동일한 오류가 있습니다. [스크린 샷] (http://i66.tinypic.com/xknm0j.png) –
필자는이 문제에 대해 생각해 왔으며, 내가 제안 할 수있는 유일한 것 오류 메시지에서 알 수 있듯이 crytography를 다시 설치하는 가장 좋은 방법은 Python의 새로운 버전으로 업그레이드하는 것입니다 (최신 업데이트 만 있으면 3.4와 같은 버전 일 수 있음). 수동으로 설치하십시오 그것은 작동하지 않을 수도 있습니다 ('pip Install --upgrade cryptography') – sonrad10
당신이'print ("Conectando a"+ server + ": Intento"+ repr (i) + "de 10"' 보내 주신 오류 메시지에 어떤 행이 표시되는지 확인하십시오. 오류를 찾고 문제를 해결하는 데 도움이 될 수 있습니다. – sonrad10