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


Answers

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

Question

अगर मैं विंडोज कमांड शेल से एक्जीक्यूटेबल कमांड के रूप में सीधे उन्हें निष्पादित करने की कोशिश करता हूं, तो मुझे पायथन प्रोग्रामों को कमांड लाइन आर्गमेंट्स प्राप्त करने में समस्या हो रही है I उदाहरण के लिए, अगर मुझे यह प्रोग्राम (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" %*



मैंने 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 पायथन संस्करण स्थापित हैं I यह देखना असंभव है कि वह कौन सा है, इसलिए मैंने अपने सभी तीनों को अपने डिफ़ॉल्ट अजगर अनुप्रयोग के रूप में देखा। आखिरकार मैं इन तीनों में से किसी एक के साथ मेरी स्क्रिप्ट तर्क प्राप्त करने में सक्षम था।




पायथन 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\" %*"



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

HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

और एक %* जोड़ा