2010-03-18 11 views
7

कभी-कभी (ग्राहक के पीसी में) मुझे विंडोज शैल में एक सीएमडी या बीएटी जैसे निष्पादित करने के लिए एक पायथन स्क्रिप्ट चाहिए, लेकिन बिना .py या Python/PythonW से जुड़े .pyw एक्सटेंशन।विंडोज़ शैल में "बूटस्ट्रैप" पायथन स्क्रिप्ट बिना .py/.pyw एसोसिएशन

मैं 'quick'n गंदा' समाधान की एक जोड़ी के साथ बाहर आया:

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

### 
+0

मुझे आपके दूसरे समाधान के साथ कुछ भी गलत नहीं दिख रहा है (इसके अलावा '||' '' '' होना चाहिए। यह अति सुंदर नहीं है, लेकिन यह काम पूरा हो जाता है। –

+0

टाइपो, सही, thx। – PabloG

उत्तर

9

आप python और windows shell script दोनों स्क्रिप्ट बनाने का प्रयास कर सकते हैं। इस मामले में आप my_flexible_script.bat फ़ाइल कर सकते हैं और इसे सीधे या python ... के माध्यम से निष्पादित कर सकते हैं।

@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 समर्थन हासिल है:

pylint से pylint.bat फ़ाइल की एक सामग्री देखें।

+0

अच्छा है, rem = "" "चाल! मैं जो खोज रहा था, thx – PabloG

+2

इस प्रकार का प्रोग्राम पॉलीग्लोट (http://en.wikipedia.org/wiki/Polyglot_%28computing%29) के रूप में जाना जाता है। –

+0

'@echo off' ट्रिगर क्यों नहीं करता है सिंटेक्स त्रुटि अपवाद? –

0

मैं का उपयोग निम्नलिखित 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 निर्देशिका में कॉपी हो गया है ... लेकिन संभावना अधिक है कि यह निर्भरता पहले से ही लक्ष्य मशीन पर है।

+0

मुझे यह उल्लेख करना चाहिए कि मैं स्क्रिप्ट को फ्रीज नहीं करना चाहता, क्योंकि मेरा मुख्य उद्देश्य इसे "स्टेरॉयड पर शैल प्रोग्राम" की तरह उपयोग कर रहा है, इसे आसानी से संपादन योग्य और संशोधित रखने के लिए – PabloG

संबंधित मुद्दे