2016-12-01 106 views
0

我正面臨編譯Python腳本與cx_Freeze 5.0困難。 腳本編譯正確,生成EXE。在滿足所有要求之前,將一系列錯誤消息輸出到控制檯。 添加完所有要求後,運行EXE的不會輸出到控制檯。程序默默停止,不打印任何東西。 如果直接從Python的運行按預期工作:cx_Freeze生成EXE打印沒有控制檯輸出

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

我認爲這個問題是關係到argparse包我用。

下面是我寫的一個小測試腳本和編譯腳本,它重現了行爲。

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編譯腳本:

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] 
) 

爲什麼程序沒有打印到控制檯?

回答

0

該問題與argparse無關......最後我嘗試打印__name__的內容。看來,如果直接從Python解釋變量包含'__main__'運行,但

當作爲cx_Freeze編譯EXE運行變量__name__,包含'nameofthegeneratedexe__main__'字符串。

更改(上述列表中沒有5)行if __name__ == "__main__":到:

if "__main__" in __name__: 

解決的問題。

+0

這是cx_Freeze中的一個錯誤,剛剛通過cx_Freeze 5.0.1發佈解決。 –