74

Mam problemy z uzyskaniem argumentów wiersza polecenia przekazanych do programów w języku Python, jeśli próbuję wykonać je bezpośrednio jako polecenia wykonywalne z powłoki poleceń systemu Windows. Na przykład, jeśli mam ten program (test.py):System Windows nie przekazuje argumentów wiersza poleceń programom w języku Python wykonanym z powłoki

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

i wykonanie:

>test foo 
Args: [] 

w stosunku do:

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

Moja konfiguracja posiada:

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" %* 
+0

Jednak to działa dla mnie. C: \ Documents and Settings \ Quim> Test bla argS: [ 'foo'] I znajduje test.py w początkowej lokalizacji dla cmd.exe (% HOMEDRIVE %% HOMEPATH% właściwości). Dla reszty nie ma nic szczególnego w mojej konfiguracji: winxp, Activepython 2.6.5 – joaquin

+0

Czy możesz użyć [RegScanner] (http://www.nirsoft.net/utils/regscanner.html) i znaleźć wszystkie wystąpienia 'Python .file 'w rejestrze? –

+2

Wow, co za frustrujący błąd :(Po prostu ponownie zainstalowałem Pythona i nadal jest on uszkodzony! Błąd został zgłoszony w śledzącym wydaniu Pythona dwa lata temu http://bugs.python.org/issue7936, ale nie ma żadnej poprawki - tylko kilka z nich używa Windows: –

Odpowiedz

83

Myślę, że to rozwiązałem. Z jakiegoś powodu nie jest to drugie miejsce w rejestrze (poza tym, że pokazane przez skojarzeń plików przechowywanych w shell \ command HKEY_CLASSES_ROOT \ Python.File \ open \):

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

Wydaje się to być kontrolowanie ustawień na mój system. Powyższe ustawienie rejestru dodaje "% *" do przekazania wszystkich argumentów do python.exe (z jakiegoś powodu go brakowało w moim rejestrze).

+0

To nie działa dla mnie w systemie Windows 7. W jakim systemie OS testowałeś to? – Acorn

+0

Testowany w systemie Vista. – mckoss

+6

Mój klucz znajduje się tutaj na Windows 7: HKEY_USERS \ S-1-5-21-2829634124-923609355-2255922086-1001 \ Oprogramowanie \ Klasy \ Aplikacje \ python.exe \ shell \ open \ command –

1

Interesujące. Działa tutaj przy użyciu Pythona 2.6 i Windows XP (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 
13

Moje ustawienie było pod innym kluczem rejestru, HKEY_CLASSES_ROOT\py_auto_file. Inne wymienione klucze również istniały, ale Windows używał tego z jakiegoś powodu.

+0

Ja też! Dzięki! –

8

Dla Pythona 3.3 w systemie Windows 7 moje ustawienie znajdowało się pod innym kluczem rejestru; Zmieniłem klucz, aby argumenty przejdzie był

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

Było "C:\Python\Python33\python.exe" "%1". Dodałem do niego tylko %*. Wartość klucza wynosi teraz: "C:\Python\Python33\python.exe" "%1" %*.

Posiadałem kilka (przynajmniej pięć) innych kluczy o wartości "C:\Python\Python33\python.exe" "%1", ale to ten, który zmieniłem, sprawił, że działało.

2

Aby to działa na mnie, musiałem użyć ścieżki rejestru:

HKEY_CLASSES_ROOT\py_auto_file\shell\open\command 

i dodał %*

0

Twoje skojarzenia programowe dla .py plików może być zawiedli. Wystarczy ponownie skojarzyć pliki .py z plikiem wykonywalnym Pythona.

Kliknij prawym przyciskiem myszy plik .py>Open with>Choose default program ...> [odnaleźć pliku C: \ PythonXY \ python.exe]

+0

Nie działa w moim systemie, ponieważ zawsze domyślnie wywoływał Python 3.6. [Wybrana odpowiedź] (https://stackoverflow.com/a/2641185/5991423) działała – Aaron3468

+0

problemy od czasu Windows10, więc to nie działa zawsze. – rundekugel

0

Sprawdziłem wszystkie klucze rejestru z python.exe i py_auto_file i uczynił je zwrócić do mojego bieżącej instalacji Pythona w tym th %* na końcu przekazuje argumenty.Byli sporo:

  • HKEY_CLASSES_ROOT \ Applications \ python.exe \ \ otwartej powłoki \ polecenie:

    • org "C: \ miniconda3 \ python.exe" „% 1 " "% *"
    • zmieniony "C: \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_CLASSES_ROOT \ py_auto_file \ \ polecenie powłoki otwartym \

    • org: "C: \ Program Files \ Sublime Text 3 \ sublime_text.exe" "% 1"
    • zmieniło: "C: \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_CURRENT_USER \ Software \ Classes \ py_auto_file \ powłoki \ polecenie open \

    • org "C: \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_USERS \ S 1-5-21-2621213409-1291422344-4183577876-2165 \ \ oprogramowanie klasy \ py_auto_file \ powłoki \ polecenie open \

    • Org "C: \ Python35 \ python.exe" „% 1" "% *"
  • HKEY_USERS \ S 1-5-21-2621213409-1291422344-4183577876-2165_Classes \ py_auto_file \ powłoki \ polecenie open \

    • org „C: \ Python35 \ python.exe ""% 1 ""% * "
  • HKEY_CLASSES_ROOT \ Applications \ pythonw.exe \ powłoki \ polecenie open \

    • org "C: \ Python34 \ pythonw.exe" "% 1"
    • zmieniony „C: \ Python35 \ pythonw eXE " "% 1" "% *"
  • HKEY_CURRENT_USER \ Software \ Classes \ Zastosowanie \ python.exe \ powłoki \ polecenie open \

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

Ale to nie wykonać zadanie dla mnie. Musiałem również zmienić domyślną aplikację python.

Application dialog

Jak widać mam 3 wersje Python zainstalowane. Nie można zobaczyć, który jest tutaj, więc wypróbowałem wszystkie trzy jako domyślną aplikację python. W końcu udało mi się uzyskać argumenty skryptu z jednym z tych trzech.

1

Oto pliki .reg ustalenie dla Pythona 3.6, 2.7 i Anaconda3:

python-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\" %*" 

python-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 (zmiana nazwy użytkownika)

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\" %*" 
Powiązane problemy