Python-скрипт "Bootstrap" в оболочке Windows без ассоциаций .py / .pyw - PullRequest
8 голосов
/ 18 марта 2010

Иногда (на компьютерах клиентов) мне требуется скрипт Python для выполнения в оболочке Windows, например .CMD или .BAT, но без расширения .py или .pyw, связанного с PYTHON / PYTHONW.

Я предложил пару «быстрых и грязных» решений:

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, более краткий способ, который я нашел (без настройки ERRORLEVEL)

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

10 голосов
/ 18 марта 2010

Вы можете попытаться создать скрипт, который будет 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.

0 голосов
/ 18 марта 2010

Я использую следующий 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 ... но высока вероятность того, что эта зависимость уже есть на целевой машине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...