2016-06-01 1 views
0

처음에는 나쁜 영어로 유감입니다.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 

답변

0

파이썬 프로그램을 컴파일, 당신이 컴파일이 코드를 사용할 수있는, (윈도우 명령 프롬프트에서 명령 pip install CX_Freeze 사용) 대신 py2exe에의 cxfreeze을 사용하는 경향이 : 여기

내 코드입니다 프로그램 :

cxfreeze "Path\To\File.py" --target-dir "Path\to\exe\file\"

Path\To\File.py는 파이썬 파일에 디렉토리 트리 당신이

를 컴파일하려고하는 것입니다

Path\to\exe\file\은 컴파일 된 프로그램이 저장 될 폴더의 디렉토리 트리입니다 (비어 있어야 함).

자세한 내용은 here을 참조하십시오.

희망이 도움이됩니다.

+0

답장을 보내 주셔서 감사합니다.하지만 여전히 동일한 오류가 있습니다. [스크린 샷] (http://i66.tinypic.com/xknm0j.png) –

+0

필자는이 문제에 대해 생각해 왔으며, 내가 제안 할 수있는 유일한 것 오류 메시지에서 알 수 있듯이 crytography를 다시 설치하는 가장 좋은 방법은 Python의 새로운 버전으로 업그레이드하는 것입니다 (최신 업데이트 만 있으면 3.4와 같은 버전 일 수 있음). 수동으로 설치하십시오 그것은 작동하지 않을 수도 있습니다 ('pip Install --upgrade cryptography') – sonrad10

+0

당신이'print ("Conectando a"+ server + ": Intento"+ repr (i) + "de 10"' 보내 주신 오류 메시지에 어떤 행이 표시되는지 확인하십시오. 오류를 찾고 문제를 해결하는 데 도움이 될 수 있습니다. – sonrad10

관련 문제