2016-12-01 6 views
0

Ich stehe vor der Schwierigkeit, Python-Skript mit cx_Freeze 5.0 zu kompilieren. Das Skript kompiliert korrekt, EXE wird generiert. Bevor alle Anforderungen erfüllt wurden, wurde eine Reihe von Fehlermeldungen auf der Konsole ausgegeben. Nach dem Hinzufügen aller Anforderungen, läuft die EXE keine Ausgabe an die Konsole. Das Programm wird automatisch gestoppt, ohne etwas zu drucken. Wenn direkt aus Python führen Sie es wie erwartet funktioniert:cx_Freeze generiert EXE druckt keine Konsolenausgabe

>python testScript.py -p 12 aaa/bbb.ccc 
Test script with the following params: 
Namespace(input_file='aaa/bbb.ccc', param=12) 

Ich denke, das Problem zu argparse Paket verwandt ich verwende.

Unten ist ein kleines Testskript und Kompilierskript, das ich geschrieben habe, das das Verhalten reproduziert.

from sys import exit, argv 
import os 
import argparse 

if __name__ == "__main__": 
    parser = argparse.ArgumentParser(prog=os.path.basename(argv[0]), 
     description='Command line parser test.') 
    parser.add_argument('input_file', 
         metavar='path/to/file', 
         help='path to source file)') 
    parser.add_argument('-p','--param', required=False, 
         metavar='par', 
         type=int, default=1, 
         help='test parameter') 

    try: 
     args = parser.parse_args() 
    except argparse.ArgumentError: 
     exit("Use -h option for help on using.") 

    if args.input_file is None: 
     parser.print_usage() 
     exit(0) 

#%% display parameters 
    print "Test script with the following params:" 
    print args 

cx_Freeze Skript kompilieren:

from cx_Freeze import version, setup, Executable 
import sys 

print "Compilation using cx_Freeze version", version 

productName = "testScript" 

build_exe_options = {"packages": ["sys","os","argparse"]} 

exe_options = Executable(
          script = productName+".py", 
          targetName = productName+".exe", 
          base = None 
         ) 
setup(
     name=productName, 
     version="0.0", 
     author="mstankie", 
     description="test script", 
     options = {"build_exe": build_exe_options}, 
     executables=[exe_options] 
) 

Warum das Programm druckt nichts an der Konsole?

Antwort

0

Das Problem wurde nicht bezogen auf argparse ... Schließlich habe ich versucht, den Inhalt von __name__ zu drucken. Es scheint, wenn sie direkt aus Python-Interpreter die Variable enthält '__main__', aber

die Variable __name__, wenn sie als cx_Freeze-kompilierten EXE ausführen, enthält 'nameofthegeneratedexe__main__' String.

die Linie ändern if __name__ == "__main__": (kein 5 in der Liste oben.) An:

if "__main__" in __name__: 

löste das Problem.

+0

Dies war ein Fehler in cx_Freeze, der gerade durch die Veröffentlichung von cx_Freeze 5.0.1 heute gelöst wurde. –