विंडोज शेल से निष्पादित पायथन कार्यक्रमों के लिए कमांड लाइन तर्क नहीं दे रहा है


87

यदि मुझे विंडोज कमांड शेल से सीधे निष्पादन योग्य कमांड के रूप में निष्पादित करने का प्रयास किया जाता है, तो मुझे पायथन प्रोग्राम्स को कमांड लाइन तर्क देने में परेशानी हो रही है। उदाहरण के लिए, यदि मेरे पास यह प्रोग्राम (test.py) है:

import sys
print "Args: %r" % sys.argv[1:]

और निष्पादित करें:

>test foo
Args: []

इसकी तुलना में:

>python test.py foo
Args: ['foo']

मेरा विन्यास है:

PATH=...;C:\python25;...
PATHEXT=...;.PY;....

>assoc .py
.py=Python.File

>ftype | grep Python
Python.CompiledFile="C:\Python25\python.exe" "%1" %*
Python.File="C:\Python25\python.exe" "%1" %*
Python.NoConFile="C:\Python25\pythonw.exe" "%1" %*

हालाँकि यह मेरे लिए काम करता है। C: \ Documents and Settings \ Quim> test foo Args: ['foo'] मैंने cmd.exe (प्रारंभिक गुणों में% HOMEDRIVE %% HOMEPATH%) के लिए प्रारंभिक स्थान पर स्थित है। बाकी के लिए मेरे सेटअप में कुछ खास नहीं है: winxp, Activepython 2.6.5
joaquin

क्या आप कृपया RegScanner का उपयोग कर सकते हैं और Python.Fileअपनी रजिस्ट्री में सभी घटनाओं को पा सकते हैं ?
पियोट्र डोब्रोगोस्ट

2
वाह क्या निराशा होती है बग :( मैंने अभी पायथन को फिर से स्थापित किया है और यह अभी भी टूटा हुआ है! बग को पायथन मुद्दे पर ट्रैकर ने दो साल पहले Bugs.python.org/issue7936 पर रिपोर्ट किया था, लेकिन कोई फिक्स नहीं है - कुछ देवता विंडोज का उपयोग करते हैं
कर्नल पैनिक।

2
इस में भाग गया जब मैंने अजगर 3.4 स्थापित किया और अजगर 2.7 का उपयोग करने की कोशिश की। अजगर 3.4 इंस्टॉलर की तरह लग रहा है यह गड़बड़?
डॉगमैटिक्स

यदि सिस्टम उपयोग कर रहा है [HKCU|HKLM]\SOFTWARE\Classes\Applications\python.exeया है [HKCU|HKLM\SOFTWARE\Classes\py_auto_file, तो यह गलत है, और आपत्तिजनक कुंजी को हटा दिया जाना चाहिए। फिर सही "पायथन" प्रविष्टि का चयन करने के लिए मानक [HKCU|HKLM]\SOFTWARE\Classes\Python.FileProDId का उपयोग करने वाले एक्सप्लोरर ("ओपन विथ" या फाइल एसोसिएशन सेटिंग्स ऐप) का उपयोग करें । shell\open\commandRegedit में उपकुंजी की जाँच करें। यदि पायथन 3 स्थापित है, तो कमांड टेम्प्लेट को पाइ लॉन्चर का उपयोग करना चाहिए। यदि लांचर सभी उपयोगकर्ताओं के लिए स्थापित है, तो टेम्पलेट होना चाहिए "C:\Windows\py.exe" "%1" %*
एरिक सन

जवाबों:


106

मुझे लगता है कि मैंने इसे हल कर दिया। किसी कारण से रजिस्ट्री में एक सेकंड जगह है (इसके अलावा HKEY_CLASSES_ROOT \ Python.File \ खोल \ open \ कमांड में संग्रहीत फ़ाइल संघों द्वारा दिखाया गया है):

[HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command]
@="\"C:\\Python25\\python.exe\" \"%1\" %*"

यह मेरे सिस्टम पर नियंत्रण सेटिंग लगता है। ऊपर दी गई रजिस्ट्री सेटिंग python.exe के सभी तर्कों को पारित करने के लिए "% *" को जोड़ती है (यह किसी कारण से मेरी रजिस्ट्री में गायब थी)।


8
मेरी कुंजी यहां विंडोज 7 पर स्थित है: HKEY_USERS \ S-1-5-21-2829634124-923609355-2255922086-1001 \ Software \ Classes \ Applications \ python.exe \ शेल \ 'ओपन' कमांड
स्टीवन कीथ

4
मूल्य के साथ: C: \ Python26 \ python.exe% 1% *
स्टीवन कीथ

2
मेरे लिए काम किया, याद रखें कि mckoss का उत्तर बच गया है या .REG फ़ाइल है यदि आप मानों को संपादित कर रहे हैं तो सीधे वहाँ से बच निकले हैं
Fedmich

3
एक साइड नोट पर: इसका मूल कारण पायथन इंस्टॉलेशन से पहले .py फाइलों के साथ एक प्रारंभिक फाइल एसोसिएशन के कारण हो सकता है। बस इस मुद्दे में भाग गया, प्रकार की .py की फाइलें नोटपैड से जुड़ी हुई थीं और फिर पायथन को स्थापित किया गया था और इस बदसूरत समस्या ने इसके बदसूरत सिर को पाला। विंडोज 10 पर बीटीडब्ल्यू।
g4m3c0d3r

2
हाल ही में लॉन्चर को C: \ Windows \ py.exe का उपयोग करने के लिए बदल दिया, और इस बग पर आया। हालाँकि, मैंने @ StevenKeith के संस्करण में "py.exe" के साथ "python.exe" के लिए प्रतिस्थापित कीस को संशोधित किया
केसी कुबैल

14

मेरे स्थापना, अभी तक एक और रजिस्ट्री कुंजी के तहत किया गया HKEY_CLASSES_ROOT\py_auto_file। उल्लिखित अन्य कुंजियाँ भी मौजूद थीं, लेकिन विंडोज किसी कारण से इस का उपयोग कर रहा था।


10

विंडोज 7 पर पायथन 3.3 के लिए, मेरी सेटिंग एक अन्य रजिस्ट्री कुंजी के तहत थी; मैंने जिन तर्कों को बदलने के लिए बदलाव किया, वह था

HKEY_USERS\S-1-5-21-3922133726-554333396-2662258059-1000_Classes\py_auto_file\shell\open\command

यह था "C:\Python\Python33\python.exe" "%1"। मैंने केवल इसके लिए अपील %*की। कुंजी का मान अब है "C:\Python\Python33\python.exe" "%1" %*

मेरे पास मूल्य के साथ कई (कम से कम पांच) अन्य चाबियाँ थीं "C:\Python\Python33\python.exe" "%1", लेकिन यह वह है जिसे मैंने बदल दिया है जिसने इसे काम किया।


5

यहां पायथन 3.6, 2.7 और एनाकोंडा 3 के लिए फिक्स करने के लिए .reg फाइलें हैं:

अजगर-3.6.0.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.py]
@="Python.File"
"Content Type"="text/plain"

[HKEY_CLASSES_ROOT\.pyc]
@="Python.CompiledFile"
"Content Type"="text/plain"

[HKEY_CLASSES_ROOT\.pyw]
@="Python.NoConFile"
"Content Type"="text/plain"


[HKEY_CLASSES_ROOT\py_auto_file]

[HKEY_CLASSES_ROOT\py_auto_file\DefaultIcon]
@="C:\\Python36\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\py_auto_file\shell\open\command]
@="\"C:\\Python36\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.File]
@="Python File"

[HKEY_CLASSES_ROOT\Python.File\DefaultIcon]
@="C:\\Python36\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\Python.File\shell\open\command]
@="\"C:\\Python36\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.CompiledFile]
@="Compiled Python File"

[HKEY_CLASSES_ROOT\Python.CompiledFile\DefaultIcon]
@="C:\\Python36\\DLLs\\pyc.ico"

[HKEY_CLASSES_ROOT\Python.CompiledFile\shell\open\command]
@="\"C:\\Python36\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.NoConFile]
@="Python File (no console)"

[HKEY_CLASSES_ROOT\Python.NoConFile\DefaultIcon]
@="C:\\Python36\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\Python.NoConFile\shell\open\command]
@="\"C:\\Python36\\python.exe\" \"%1\" %*"

अजगर-2.7.0.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.py]
@="Python.File"
"Content Type"="text/plain"

[HKEY_CLASSES_ROOT\.pyc]
@="Python.CompiledFile"
"Content Type"="text/plain"

[HKEY_CLASSES_ROOT\.pyw]
@="Python.NoConFile"
"Content Type"="text/plain"


[HKEY_CLASSES_ROOT\py_auto_file]

[HKEY_CLASSES_ROOT\py_auto_file\DefaultIcon]
@="C:\\Python27\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\py_auto_file\shell\open\command]
@="\"C:\\Python27\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.File]
@="Python File"

[HKEY_CLASSES_ROOT\Python.File\DefaultIcon]
@="C:\\Python27\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\Python.File\shell\open\command]
@="\"C:\\Python27\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.CompiledFile]
@="Compiled Python File"

[HKEY_CLASSES_ROOT\Python.CompiledFile\DefaultIcon]
@="C:\\Python27\\DLLs\\pyc.ico"

[HKEY_CLASSES_ROOT\Python.CompiledFile\shell\open\command]
@="\"C:\\Python27\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.NoConFile]
@="Python File (no console)"

[HKEY_CLASSES_ROOT\Python.NoConFile\DefaultIcon]
@="C:\\Python27\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\Python.NoConFile\shell\open\command]
@="\"C:\\Python27\\python.exe\" \"%1\" %*"

ananconda3.reg (उपयोगकर्ता नाम बदलें)

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.py]
@="Python.File"
"Content Type"="text/plain"

[HKEY_CLASSES_ROOT\.pyc]
@="Python.CompiledFile"
"Content Type"="text/plain"

[HKEY_CLASSES_ROOT\.pyw]
@="Python.NoConFile"
"Content Type"="text/plain"


[HKEY_CLASSES_ROOT\py_auto_file]

[HKEY_CLASSES_ROOT\py_auto_file\DefaultIcon]
@="C:\\Users\\username\\Anaconda3\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\py_auto_file\shell\open\command]
@="\"C:\\Users\\username\\Anaconda3\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.File]
@="Python File"

[HKEY_CLASSES_ROOT\Python.File\DefaultIcon]
@="C:\\Users\\username\\Anaconda3\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\Python.File\shell\open\command]
@="\"C:\\Users\\username\\Anaconda3\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.CompiledFile]
@="Compiled Python File"

[HKEY_CLASSES_ROOT\Python.CompiledFile\DefaultIcon]
@="C:\\Users\\username\\Anaconda3\\DLLs\\pyc.ico"

[HKEY_CLASSES_ROOT\Python.CompiledFile\shell\open\command]
@="\"C:\\Users\\username\\Anaconda3\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.NoConFile]
@="Python File (no console)"

[HKEY_CLASSES_ROOT\Python.NoConFile\DefaultIcon]
@="C:\\Users\\username\\Anaconda3\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\Python.NoConFile\shell\open\command]
@="\"C:\\Users\\username\\Anaconda3\\python.exe\" \"%1\" %*"

4

इसे मेरे लिए काम करने के लिए, मुझे रजिस्ट्री पथ का उपयोग करना पड़ा:

HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

और एक जोड़ा %*


0

दिलचस्प। अजगर 2.6 और विंडोज एक्सपी (5.1.2600) का उपयोग कर यहां काम करता है:

C:\Documents and Settings\hbrown>python test.py foo
['test.py', 'foo']

C:\Documents and Settings\hbrown>test.py foo
['C:\\Documents and Settings\\hbrown\\test.py', 'foo']

C:\Documents and Settings\hbrown>test foo
['C:\\Documents and Settings\\hbrown\\test.py', 'foo']

C:\Documents and Settings\hbrown>type test.py
import sys
print sys.argv 

C:\Documents and Settings\hbrown>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PY 

C:\Documents and Settings\hbrown>assoc .py
.py=Python.File

0

.pyफ़ाइलों के लिए आपके प्रोग्राम संघों को गड़बड़ किया जा सकता है। बस फिर से सहयोगी.py अपने अजगर निष्पादन योग्य फ़ाइलों को करें।

राइट एक क्लिक .pyफ़ाइल> Open with> Choose default program ...> [सी लगता है: \ PythonXY \ python.exe]


मेरे सिस्टम पर काम नहीं किया, क्योंकि यह हमेशा पायथन 3.6 को कॉल करने में चूक गया। चयनित जवाब काम किया है
Aaron3468

विंडोज 10 के बाद से समस्याएं हैं, इसलिए यह हमेशा काम नहीं करता है।
rundekugel

0

मैं के साथ सभी रजिस्ट्री कुंजी की जाँच की python.exeऔर py_auto_fileऔर उन्हें वें सहित मेरे वर्तमान अजगर स्थापना को इंगित कर दिया %*अंत कि तर्क गुजरता है पर। वे काफी कम थे:

  • HKEY_CLASSES_ROOT \ आवेदन \ python.exe \ शैल \ खुला \ आदेश:

    • org: "C: \ miniconda3 \ python.exe" "% 1" "% *"
    • परिवर्तित: "C: \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_CLASSES_ROOT \ py_auto_file \ खोल \ खुला \ आदेश

    • org: "C: \ Program Files \ Sublime Text 3 \ sublime_text.exe" "% 1"
    • परिवर्तित: "C: \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_CURRENT_USER \ Software \ Classes \ py_auto_file \ शैल \ खुला \ आदेश

    • org: "C: \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_USERS \ S-1-5-21-2621213409-1291422344-4183577876-2165 \ Software \ Classes \ py_auto_file \ खोल \ खुला \ आदेश

    • org: "C: \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_USERS \ एस 1-5-21-2621213409-1291422344-4183577876-2165_Classes \ py_auto_file \ खोल \ खुला \ आदेश

    • org: "C: \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_CLASSES_ROOT \ आवेदन \ pythonw.exe \ खोल \ खुला \ आदेश

    • org: "C: \ Python34 \ pythonw.exe" "% 1"
    • परिवर्तित: "C: \ Python35 \ pythonw.exe" "% 1" "% *"
  • HKEY_CURRENT_USER \ Software \ Classes \ आवेदन \ python.exe \ शैल \ खुला \ आदेश

    • org: "C: \ Python35 \ python.exe" "% 1" "% *"

लेकिन यह मेरे लिए काम नहीं किया। मुझे अपना डिफ़ॉल्ट अजगर आवेदन भी बदलना था।

आवेदन संवाद

जैसा कि कोई देख सकता है कि मेरे पास 3 पायथन संस्करण स्थापित हैं। यह देखना असंभव है कि यहां कौन सा है इसलिए मैंने अपने डिफ़ॉल्ट अजगर आवेदन के रूप में उन तीनों की कोशिश की। आखिरकार मैं इन तीनों में से एक के साथ अपने स्क्रिप्ट तर्क प्राप्त करने में सक्षम था।


0

विंडोज रजिस्ट्री के माध्यम से देखने से, मुझे उन सभी स्थानों का पता चला जहां कुछ भी पसंद है Python36\pythonw.exe "%1" %* दिखाई देता है।

जब मैं टाइप करता हूँ python app.py args कमांड प्रॉम्प्ट पर , तो सब कुछ ठीक से काम करता है।

जब मैं सिर्फ ऐप नाम का उपयोग करता हूं (app.py args ) विंडोज पायथन में app.py खोलता है, लेकिन यह तब विफल हो जाता है जब यह argv [1] तक पहुंचने का प्रयास करता है, क्योंकि len (argv) 1 है।

जाहिरा तौर पर विंडोज अजगर को एक पीआई फाइल पास करने के लिए पर्याप्त जानता है, लेकिन मैं रजिस्ट्री प्रविष्टियों को देखने से यह पता नहीं लगा सकता कि यह कैसे कमांड का निर्माण करता है। यह "%1"बजाय उपयोग करने के लिए प्रतीत होता है "%1" %*


0

यदि निम्न रजिस्ट्री कुंजियों को संपादित करके यह मेरे विंडोज 10 सिस्टम पर तय किया गया है:

Computer\HKEY_CLASSES_ROOT\py_auto_file\shell\open\command
Computer\HKEY_CLASSES_ROOT\Python.File\Shell\Open\Command
Computer\HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command

इस मूल्य के लिए:

"C:\Python27\python.exe" "%1" %*

0

समाधान खोजने में मेरी मदद करने के लिए अन्य उत्तर के लिए बहुत बहुत धन्यवाद!

मेरा मामला ओपन- .pyफाइल्स के साथ था py.exe(नहीं)python.exe सीधे ) के , इस मामले ने कुछ टिप्पणियों में नोट किया, लेकिन मैंने अंतर पर जोर देने के लिए एक अलग उत्तर के रूप में इसे पोस्ट करने का फैसला किया।

इसलिए मेरे पास मेरे .py-फाइल्स हैं C:\Windows\py.exeऔर C:\Windows\py.iniविन्यास में मेरे पास कुछ शबंग परिभाषाएँ हैं

[commands]
<my_venv_py> = C:\Programs\my_venv_py\Scripts\python.exe
<my_venv_py_w> = C:\Programs\my_venv_py\Scripts\pythonw.exe

इस तरह मेरी लिपियों में उपयोग करने के लिए #!<MY_VENV_PY>

और माइक्रोसॉफ्ट विंडोज 7 पर [संस्करण 6.1.7601] मेरी अजगर स्क्रिप्ट को इस तरह से आर्गन नहीं मिला

script.py 1 2

लेकिन यह ठीक काम किया

py script.py 1 2

फ़ाइल संघों ठीक थे

> assoc .py
.py=Python.File

> ftype | grep Python
File STDIN:
Python.CompiledFile="C:\Windows\py.exe" "%1" %*
Python.File=C:\Windows\py.exe "%L" %*
Python.NoConFile="C:\Windows\pyw.exe" "%1" %*

मैंने बहुत सारे रजिस्ट्री परिवर्तनों की कोशिश की है, लेकिन अंतिम मदद निम्न परिवर्तन थी ( .reg-file और run में सहेजी गई )। मुझे "%1"प्रारंभिक मूल्य के साथ यह रजिस्ट्री कुंजी खोज स्ट्रिंग मिली है "C:\Windows\py.exe" "%1"और %*अन्य उत्तर नोट के रूप में अंत में जोड़ा गया है:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Applications\py.exe\shell\open\command]
@="\"C:\\Windows\\py.exe\" \"%1\" %*"

जानकारी के लिए, इससे पहले कि मैंने इन कुंजियों और मूल्यों को सेटअप करने का प्रयास किया और मदद नहीं की (कम से कम ऊपर दिए गए नोट से पहले):

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.py]
@="Python.File"
[HKEY_CURRENT_USER\Software\Classes\.py]
@="Python.File"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.py]
@="Python.File"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py]
@="Python.File"

[HKEY_CLASSES_ROOT\py_auto_file]
@="Python File"
[HKEY_CLASSES_ROOT\py_auto_file\shell\open\command]
@="\"C:\\Windows\\py.exe\" \"%1\" %*"

[HKEY_CLASSES_ROOT\Python.File]
@="Python File"
[HKEY_CLASSES_ROOT\Python.File\Shell\Open\command]
@="\"C:\\Windows\\py.exe\" \"%1\" %*"


0

विंडोज 10 में इसे संशोधित करने के लिए काम करने के लिए इसे प्राप्त करना था (अंत में% *)

कंप्यूटर \ HKEY_USERS \ एस 1-5-21-2364940108-955964078-1358188674-1001 \ Software \ Classes \ आवेदन \ py.exe \ खोल \ खुला \ आदेश

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