विंडोज में पायथन स्क्रिप्ट को कैसे निष्पादित करें?


91

मेरे पास एक सरल स्क्रिप्ट blah.py (पायथन 2 का उपयोग करके) है:

import sys
print sys.argv[1]

यदि मैं अपनी स्क्रिप्ट निष्पादित करता हूं:

python c:/..../blah.py argument

यह तर्क प्रिंट करता है लेकिन अगर मैं स्क्रिप्ट को निष्पादित करता हूं:

blah.py argument

त्रुटि होती है:

IndexError ...

इसलिए तर्क स्क्रिप्ट से नहीं गुजरते।

PATH में python.exe। पथ के साथ फ़ोल्डर भी PATH में।
python.exe * .py फ़ाइलों को निष्पादित करने के लिए डिफ़ॉल्ट प्रोग्राम है।

समस्या क्या है?


3
कोड का एक स्निपेट पोस्ट करने से हमें आपकी मदद करने में मदद मिल सकती है।
jldupont

बिना क्रिस्टल बॉल के आदमी ने पहले ही एक समाधान दे दिया है =) प्रिंट sys.argv [1] यह त्रुटि पैदा करता है।
टन 4 डेग

यदि आपके पास पायथन के कई संस्करण स्थापित हैं, तो आपको इस stackoverflow.com/questions/1934675/… की आवश्यकता हो सकती है ।
laike9m

मैन्युअल रूप से मेरी स्क्रिप्ट को रजिस्ट्री से चलाने के लिए अजगर को बताएं: "C: \ Python27 \ python.exe" "C: \ Python27 \ tpt.py" "% 1" `

जवाबों:


144

जब आप सामने "अजगर" टाइप किए बिना स्क्रिप्ट निष्पादित करते हैं, तो आपको दो चीजों को जानने की जरूरत है कि विंडोज प्रोग्राम को कैसे लागू करता है। सबसे पहले यह पता लगाना है कि विंडोज़ किस तरह की फाइल के बारे में सोचती है:

    सी: \> गधे
    .py = Python.File

अगला, आपको यह जानना होगा कि विंडोज उस एक्सटेंशन के साथ चीजों को कैसे निष्पादित कर रहा है। यह फ़ाइल प्रकार "Python.File" से जुड़ा है, इसलिए यह कमांड दिखाता है कि यह क्या कर रहा है:

    C: \> ftype Python.File
    पायथन.फाइल = "c: \ python26 \ python.exe" "% 1"% *

इसलिए मेरी मशीन पर, जब मैं "blah.py foo" टाइप करता हूं, तो यह इस सटीक कमांड को निष्पादित करेगा, जिसके परिणाम में कोई अंतर नहीं होने की तुलना में अगर मैंने पूरी बात खुद टाइप की है:

    "c: \ python26 \ python.exe" "blah.py" foo

यदि आप उद्धरण चिह्नों सहित समान चीज़ टाइप करते हैं, तो आपको "blah.py foo" टाइप करने पर समान परिणाम मिलेंगे। अब आप अपनी बाकी की समस्या का पता लगाने की स्थिति में हैं।

(या आपके प्रश्न में अधिक उपयोगी जानकारी पोस्ट करें, जैसे कि कंसोल में आप जो देखते हैं उसकी वास्तविक कट-एंड-कॉपी प्रतियां। ध्यान दें कि जो लोग उस प्रकार का काम करते हैं, उनके प्रश्नों को वोट दिया जाता है, और वे प्रतिष्ठा अंक प्राप्त करते हैं, और अधिक लोग अच्छे उत्तरों के साथ उनकी मदद करने की संभावना है।)

टिप्पणियाँ से लाया:

यहां तक ​​कि अगर assoc और ftype सही जानकारी प्रदर्शित करते हैं, तो ऐसा हो सकता है कि तर्क छीन लिए जाएं। उस मामले में क्या मदद मिल सकती है जो सीधे पायथन के लिए प्रासंगिक रजिस्ट्री कुंजी को ठीक कर रहा है। ठीक

HKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\command

इसकी कुंजी:

"C:\Python26\python26.exe" "%1" %*

शायद, पहले, %*गायब था। इसी तरह सेट करें

 HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

उसी मूल्य पर। Http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/ देखें

python.exe के लिए उदाहरण रजिस्ट्री सेटिंग HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\commandरजिस्ट्री पथ में भिन्नता है, उपयोग कर सकते हैं python26.exeया python.exeया जो भी पहले से ही रजिस्ट्री में है।

यहां छवि विवरण दर्ज करें HKEY_CLASSES_ROOT\py_auto_file\shell\open\command


30
भले ही assocऔर ftypeसही जानकारी प्रदर्शित करने के लिए, यह हो सकता है कि तर्क छीन लिए जाएं। उस मामले में क्या मदद मिल सकती है जो सीधे पायथन के लिए प्रासंगिक रजिस्ट्री कुंजी को ठीक कर रहा है। HKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\commandकुंजी सेट करें : "C:\Python26\python26.exe" "%1" %* संभवतः, पहले, %*गायब था। इसी तरह, HKEY_CLASSES_ROOT\py_auto_file\shell\open\commandएक ही मूल्य पर सेट करें। देखें eli.thegreenplace.net/2010/12/14/...
parvus

5
@parvus आपकी टिप्पणी मेरे लिए अंतिम समाधान थी। यहां तक ​​कि सही ढंग से पढ़ने वाले संघों के साथ, ये दोनों चाबियाँ गलत तरीके से सेट की गई थीं।
नाथन कॉक्स

1
मैंने HKEY_CLASSES_ROOT \ .py \ OpenWithProgids के साथ समस्याओं में भी कुछ विज़ुअलस्टैडियो से संबंधित होने के लिए सेट किया है, खासकर जब मैं अपने AppVeyor परीक्षणों में पायथन स्क्रिप्ट चलाने की कोशिश करता हूं। Help.appveyor.com/discussions/problems/… देखें ।
जैक ओ'कॉनर

1
मेरा भी ऐसा ही मुद्दा है। एनाकोंडा ने डिफ़ॉल्ट रूप से रजिस्ट्री कुंजी को लापता% *
प्रसाद

Win10 में मैं लिखता हूं test.py 123और मैं इसके 123रूप में मुद्रित होता हूं sys.argv[1]। क्या माइक्रोसॉफ्ट ने कुछ बदला?
हृदयोज टी

22

आप अजगर फ़ाइलों python.exe को संभालने के लिए डिफ़ॉल्ट अनुप्रयोग बनाना चाहिए।

* एक .py फ़ाइल पर राइट क्लिक करें, "ओपन विथ" डायलॉग चुनें। "Python.exe" चुनें और "इस फ़ाइल प्रकार के लिए हमेशा इस प्रोग्राम का उपयोग करें" चुनें (ऐसा कुछ)।

तब आपकी पायथन फाइलें हमेशा python.exe का उपयोग करके चलाई जाएंगी


16

इसके अतिरिक्त, यदि आप फ़ाइल नाम के अंत में .py(या .pyw) टाइप किए बिना अपनी अजगर लिपियों को चलाने में सक्षम होना चाहते हैं, तो आपको PATHEXT पर्यावरण चर में एक्सटेंशन की सूची में .PY(या .PY;.PYW) जोड़ने की आवश्यकता है ।

विंडोज 7 में:

कंप्यूटर पर राइट क्लिक करें
गुण छोड़ दिया क्लिक करें
उन्नत सिस्टम सेटिंग्स छोड़ दिया क्लिक करें
उन्नत टैब छोड़ दिया क्लिक करें
पर्यावरण चर छोड़ दिया क्लिक करें ...
"के अंतर्गत प्रणाली चर" नीचे स्क्रॉल जब तक आप देख PATHEXT
छोड़ दिया क्लिक PATHEXT पर यह उजागर करने के लिए
बाएँ संपादित करें पर क्लिक करें ...
"वैरिएबल वैल्यू" संपादित करें, ताकि इसमें समाहित हो जाए ;.PY (अंतिम कुंजी अंत तक छोड़ जाएगी)
बाएं-क्लिक करें OK
बाएं-क्लिक करें OK
बाएं-क्लिक करें OK

नोट # 1: कमांड-प्रॉम्प्ट विंडो में परिवर्तन w / o बंद और फिर से खुले हुए नहीं दिखाई देगा।

नोट # 2: .pyऔर .pywएक्सटेंशन के बीच का अंतर यह है कि पूर्व चलने पर कमांड प्रॉम्प्ट खोलता है, और बाद वाला नहीं।

मेरे कंप्यूटर पर, मैंने ;.PY;.PYWअंतिम (सबसे कम प्राथमिकता वाले) एक्सटेंशन के रूप में जोड़ा , इसलिए "पहले" और "बाद में" पैटर्नेक्स्ट के मान:

इससे पहले: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

उपरांत .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

यहाँ कुछ शिक्षाप्रद आदेश दिए गए हैं:

C:\>echo %pathext%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

C:\>assoc .py
.py=Python.File

C:\>ftype Python.File
Python.File="C:\Python32\python.exe" "%1" %*

C:\>assoc .pyw
.pyw=Python.NoConFile

C:\>ftype Python.NoConFile
Python.NoConFile="C:\Python32\pythonw.exe" "%1" %*

C:\>type c:\windows\helloworld.py
print("Hello, world!")  # always use a comma for direct address

C:\>helloworld
Hello, world!

C:\>

4

विंडोज में पायथन स्क्रिप्ट को कैसे निष्पादित करें?

आप pylauncher स्थापित कर सकते हैं । इसका उपयोग .py, .pyw, .pyc, .pyo फ़ाइलों को लॉन्च करने के लिए किया जाता है और कई पायथन इंस्टॉलेशन का समर्थन करता है:

T\:> blah.py argument

यदि आपके पास .py एक्सटेंशन है, तो निर्दिष्ट किए बिना आप अपने पायथन स्क्रिप्ट को चला सकते हैं। यदि आपके पास। PATHEXT वातावरण चर में .pyw है:

T:\> blah argument

#!यदि आप एक से अधिक संस्करण स्थापित हैं, तो विंडोज पर वांछित पायथन संस्करण का चयन करने के लिए शेबंग ( हेडर लाइन) के लिए समर्थन जोड़ता है। आप * निक्स-संगत सिंटैक्स का उपयोग कर सकते हैं #! /usr/bin/env python

आप संस्करण को स्पष्ट रूप से निर्दिष्ट कर सकते हैं, जैसे कि नवीनतम स्थापित पायथन 3 संस्करण का उपयोग करने के लिए:

T:\> py -3 blah.py argument

यह भी sys.argvएक पक्ष प्रभाव के रूप में अपनी समस्या को ठीक करना चाहिए ।


पायथन लॉन्चर बीटा स्थिति में है।
निकोलस बारबुल्स्को


शायद। लेकिन मैं विंडोज पर पायथन 3 स्थापित करने में सफल नहीं हुआ । शायद आप यहां मेरी मदद कर सकते हैं।
निकोलस बारबुलेसको

4

मुझे उसी समस्या का सामना करना पड़ा लेकिन विंडोज उपयोगकर्ताओं (लिनक्स से आने वाले) के लिए अपने कोड को पैकेज करने की आवश्यकता के संदर्भ में। मेरे पैकेज में कमांड लाइन विकल्पों के साथ कई स्क्रिप्ट हैं।

मुझे इन लिपियों को विंडोज उपयोगकर्ताओं की मशीनों पर उचित स्थान पर स्थापित करने की आवश्यकता है ताकि वे उन्हें कमांड लाइन से इनवॉइस कर सकें। जैसा कि पैकेज माना जाता है कि उपयोगकर्ता के अनुकूल है, मेरे उपयोगकर्ताओं को इन लिपियों को चलाने के लिए अपनी रजिस्ट्री को बदलने के लिए कहना असंभव होगा।

मुझे एक समाधान मिला है कि कॉन्टिनम पर लोग पायथन लिपियों के लिए उपयोग करते हैं जो उनके एनाकोंडा पैकेज के साथ आते हैं - उदाहरण के लिए अपने एनाकोंडा / लिपियों निर्देशिका की जांच करें।

पायथन लिपि के लिए test, दो फाइलें बनाएं: ए test.batऔर ए test-script.py

test.batदिखता है इस प्रकार है ( .batमें फ़ाइलों को Anaconda\Scriptsकॉल python.exeएक रिश्तेदार पथ जो मैं अपने उद्देश्यों के लिए अनुकूलित के साथ):

@echo off
set PYFILE=%~f0
set PYFILE=%PYFILE:~0,-4%-script.py
"python.exe" "%PYFILE%" %*

test-script.py आपकी वास्तविक पायथन लिपि है:

import sys
print sys.argv

यदि आप इन दो फ़ाइलों को अपनी स्थानीय निर्देशिका में छोड़ देते हैं, तो आप .batफ़ाइल के माध्यम से अपनी पायथन स्क्रिप्ट को लागू कर सकते हैं

test.bat hello world
['C:\\...\\test-scripy.py', 'hello', 'world']

यदि आप दोनों फाइलों को उस स्थान पर कॉपी करते हैं जो आपके PATH(जैसे Anaconda\Scripts) पर है तो आप .batप्रत्यय को छोड़ कर अपनी स्क्रिप्ट भी लिख सकते हैं

test hello world
['C:\\...Anaconda\\Scripts\\test-scripy.py', 'hello', 'world']

अस्वीकरण: मुझे नहीं पता कि क्या चल रहा है और यह कैसे काम करता है और इसलिए किसी भी स्पष्टीकरण की सराहना करेगा।


.batप्रत्येक पायथन लिपि के लिए एक आवरण बनाना अनाड़ी और निरर्थक है। मुझे इसकी सिफारिश नहीं करनी है।
१17 ’११

2

पर विंडोज ,

"अजगर" टाइप किए बिना एक अजगर मॉड्यूल चलाने के लिए ,

-> किसी भी अजगर (*। Py) फ़ाइल पर राइट क्लिक करें

-> संपत्ति को "python.exe" के साथ खुला सेट करें

-> "इस फ़ाइल प्रकार के लिए हमेशा इस प्रोग्राम का उपयोग करें" जांचें

-> चर पर्यावरण के लिए python।

".Py" एक्सटेंशन टाइप किए बिना एक अजगर मॉड्यूल चलाने के लिए

-> PATHEXT सिस्टम वेरिएबल को एडिट करें और सूची में ".PY" एक्सटेंशन को जोड़ें।


1

यहाँ एक अविश्वसनीय रूप से उपयोगी उत्तर मिला : कैसे cmd में विभिन्न अजगर संस्करणों को चलाने के लिए?

मैं विंडोज उपयोगिता के लिए पायथन लॉन्चर का उपयोग करने का सुझाव दूंगा जो कुछ समय पहले पायथन 3.3 में पेश किया गया था। आप पायथन 2 और 3 के पुराने संस्करणों के साथ उपयोग के लिए इसे लेखक की वेबसाइट से सीधे डाउनलोड और इंस्टॉल कर सकते हैं।

भले ही आप इसे कैसे प्राप्त करें, स्थापना के बाद यह खुद को सभी मानक पायथन फाइल एक्सटेंशन (यानी, .py, .pyw, .pyc, और .pyo फ़ाइलों) के साथ संबद्ध करेगा। आप कमांड-प्रॉम्प्ट पर न केवल स्पष्ट रूप से उपयोग कर पाएंगे, बल्कि लिनक्स / यूनिक्स-वाई शेबंग #! / Usr / bin / env pythonX टिप्पणियों को जोड़कर स्क्रिप्ट-बाय-स्क्रिप्ट आधार पर भी उपयोग किया जा सकता है। आपके पायथन लिपियों की शुरुआत।

जैसा कि जेएफ सेबेस्टियन सुझाव देते हैं, विंडोज में पायथन लॉन्चर विंडोज में पायथन के विभिन्न संस्करण को लॉन्च करने के लिए सबसे अच्छा और डिफ़ॉल्ट विकल्प है। यह एक तृतीय-पक्ष उपकरण हुआ करता था, लेकिन अब इसे पायथन 3.3 के बाद से आधिकारिक रूप से समर्थन प्राप्त है।

संस्करण 3.3 में नया।

विंडोज के लिए पायथन लॉन्चर एक उपयोगिता है जो स्थान और विभिन्न पायथन संस्करणों के निष्पादन में सहायता करता है। यह स्क्रिप्ट (या कमांड-लाइन) को एक विशिष्ट पायथन संस्करण के लिए वरीयता का संकेत देता है, और उस संस्करण का पता लगाएगा और निष्पादित करेगा।

यह एक महान उपकरण है बस इसका उपयोग करें!


0

क्या आप किसी भी नक्शे से python.exe निष्पादित कर सकते हैं? यदि आप नहीं करते हैं, यदि आपके पास PATH enviroment में python.exe के लिए उचित मान हैं तो चबाना

क्या आप उसी निर्देशिका में हैं जो blah.py। कमांड जारी करके इसे जांचें -> blah.py संपादित करें और जांचें कि क्या आप इस फाइल को खोल सकते हैं

संपादित करें:

उस मामले में आप नहीं कर सकते। ( python arg का अर्थ है कि आप python.exe को कॉल करते हैं, कुछ मापदंडों को सफेद करते हैं, जो कि पायथन को लगता है कि उस स्क्रिप्ट का फ़ाइल नाम है जिसे आप चलाना चाहते हैं)

आप अपने पाथ मैप में बैट फाइल व्हाइट लाइन बना सकते हैं और .bat फाइल चला सकते हैं

उदाहरण:
पथ मानचित्रों में से एक में blah.py.bat संपादन फ़ाइल बनाएँ और लाइन डालें

python C:\Somedir\blah.py

अब आप किसी भी तरह से blah.py चला सकते हैं, क्योंकि आपको बैट चलाने के दौरान आपको .bat extention रखने की जरूरत नहीं है


PATH में अजगर। और निर्देशिका जिसमें blah.py भी PATH में है। मुख्य विचार यह है कि इसके लिए पूर्ण पथ लिखे बिना अजगर स्क्रिप्ट को निष्पादित करना है। लेकिन अब मुझे तर्क पास करने में समस्या है।
टन 4

3
Ralu, आपको इस तरह एक पायथन स्क्रिप्ट को निष्पादित करने के लिए एक बैच फ़ाइल की आवश्यकता नहीं है। निष्पादन योग्य एक्सटेंशन के रूप में .py और .pyw को शामिल करने के लिए पथ पर्यावरण संस्करण का उपयोग करें। इस संस्करण को आपको या तो .bat निर्दिष्ट करने की आवश्यकता नहीं है।
टोड

0

अगर मुझे समझ में आ गया है, यह इस तरह है:

C:\Users\(username)\AppData\Local\Programs\Python\Python(version)

COPY (हटाएं नहीं) python.exe और नाम बदलने के लिए py.exe और निष्पादित करें:

py filename.py

0

बस कमांड चलाएं:

C:>python .\file_name.py

मान लें कि फ़ाइल का नाम समान फ़ोल्डर में है और पायथन को पहले ही पर्यावरण चर में जोड़ दिया गया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.