代码之家  ›  专栏  ›  技术社区  ›  PabloG

Windows Shell中没有.py/.pyw关联的“bootstrap”python脚本

  •  8
  • PabloG  · 技术社区  · 14 年前

    有时(在客户的PC机中),我需要一个python脚本在windows shell中执行,比如.cmd或.bat,但是没有与python/pythonw关联的.py或.pyw扩展。

    我提出了一对“快速”的解决方案:

    1)

    """
    e:\devtool\python\python.exe %0 :: or %PYTHONPATH%\python.exe
    goto eof:
    """ 
    # Python test
    print "[works, but shows shell errors]"
    

    2)

    @echo off
    for /f "skip=4 delims=xxx" %%l in (%0) do @echo %%l | e:\devtools\python\python.exe
    goto :eof
    ::----------
    
    # Python test
    print "[works better, but is somewhat messy]"
    

    你知道更好的解决方案吗?(即:更简洁或优雅)


    更新:

    基于@van answer,我发现的更简洁的方法(不设置错误级别)

    @e:\devtools\python\python.exe -x "%~f0" %* & exit /b
    
    ### Python begins....
    import sys
    
    for arg in sys.argv:
        print arg
    
    raw_input("It works!!!\n")
    
    ###
    
    2 回复  |  直到 14 年前
        1
  •  10
  •   van    14 年前

    你可以尝试创建一个脚本 python windows shell script . 在这种情况下,您可以命名文件 my_flexible_script.bat 直接执行或通过 python ... .

    查看的内容 pylint.bat 文件来自 pylint :

    @echo off
    rem = """-*-Python-*- script
    rem -------------------- DOS section --------------------
    rem You could set PYTHONPATH or TK environment variables here
    python -x "%~f0" %*
    goto exit
    
    """
    # -------------------- Python section --------------------
    import sys
    from pylint import lint
    lint.Run(sys.argv[1:])
    
    
    DosExitLabel = """
    :exit
    exit(ERRORLEVEL)
    rem """
    

    它类似于您所做的,但更符合您的要求。 dual-script 支持。

        2
  •  0
  •   Joe Koberg    14 年前

    我用下面的 distutils / py2exe 生成单个可运行可执行文件的脚本:

    from distutils.core import setup
    import py2exe, sys, os
    
    sys.argv.append('py2exe')
    
    setup(
        options = {'py2exe': {'bundle_files': 1}},
        console = [{'script': "MyScript.py"}],
        zipfile = None,
    )
    

    我明白了 MSVCR71.DLL 因此被复制到dist目录中…但这种依赖性很可能已经在目标机器上了。