Windows가 셸에서 실행되는 Python 프로그램에 명령 줄 인수를 전달하지 않습니다.


87

Windows 명령 셸에서 실행 가능한 명령으로 직접 실행하려고하면 명령 줄 인수를 Python 프로그램에 전달하는 데 문제가 있습니다. 예를 들어이 프로그램 (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 %)에 test.py를 배치했습니다. 나머지는 내 설정에 특별한 것이 없습니다. winxp, Activepython 2.6.5
joaquin 2010

RegScanner 를 사용 하고 Python.File레지스트리에서 모든 항목을 찾을 수 있습니까?
Piotr Dobrogost

2
정말 실망스러운 버그입니다 :( 방금 Python을 다시 설치했는데 여전히 손상되었습니다! 버그는 2 년 전에 Python 문제 추적기에보고 되었지만 bugs.python.org/issue7936 수정되지 않았습니다. Windows를 사용하는 개발자는 거의 없습니다.
Colonel Panic

2
파이썬 3.4를 설치하고 파이썬 2.7을 사용하려고 할 때 이것을 실행했습니다. 파이썬 3.4 설치 프로그램이 엉망으로 만든 것 같습니까?
Dogmatixed

시스템에서 [HKCU|HKLM]\SOFTWARE\Classes\Applications\python.exe또는을 사용하는 경우 [HKCU|HKLM\SOFTWARE\Classes\py_auto_file잘못 구성된 것이므로 문제가되는 키를 삭제해야합니다. 그런 다음 탐색기 ( "연결 프로그램"또는 파일 연결 설정 앱)를 사용하여 표준 [HKCU|HKLM]\SOFTWARE\Classes\Python.FileProgId 를 사용하는 올바른 "Python"항목을 선택합니다 . shell\open\commandregedit 에서 하위 키를 확인 하십시오. Python 3이 설치된 경우 명령 템플릿은 py 실행기를 사용해야합니다. 런처가 모든 사용자 용으로 설치된 경우 템플릿은 "C:\Windows\py.exe" "%1" %*.
Eryk Sun

답변:


106

나는 이것을 해결했다고 생각한다. 어떤 이유로 레지스트리에 SECOND 위치가 있습니다 (HKEY_CLASSES_ROOT \ Python.File \ shell \ open \ command에 저장된 파일 연결에 의해 표시되는 위치 외에) :

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

이것은 내 시스템의 제어 설정 인 것 같습니다. 위의 레지스트리 설정은 "% *"를 추가하여 모든 인수를 python.exe에 전달합니다 (어떤 이유로 내 레지스트리에 누락되었습니다).


8
내 키는 Windows 7에 있습니다. HKEY_USERS \ S-1-5-21-2829634124-923609355-2255922086-1001 \ Software \ Classes \ Applications \ python.exe \ shell \ open \ command
Steven Keith

4
값 : C : \ Python26 \ python.exe % 1 % *
Steven Keith

2
나를 위해 일했다, 그 mckoss의 대답은 이스케이프 기억하거나 값을 편집하는 경우 .REG 파일로 바로의 탈출을 제거
fedmich

3
참고로이 문제의 근본 원인은 Python 설치 전에 .py 파일과의 초기 파일 연결 때문일 수 있습니다. 이 문제가 발생했을 때 .py 유형의 파일이 메모장과 연결되고 Python이 설치되었고이 추악한 문제는 추악한 머리를 갖게되었습니다. Windows 10 BTW에서.
g4m3c0d3r

2
최근에 C : \ Windows \ py.exe를 사용하도록 런처를 변경했으며이 버그를 발견했습니다. 그러나, 나는 "python.exe를"대체 "py.exe"와 StevenKeith의 버전 @의 주요 수정
케이시 Kuball

14

내 설정은 또 다른 레지스트리 키인 HKEY_CLASSES_ROOT\py_auto_file. 언급 된 다른 키도 존재했지만 Windows는 어떤 이유로이 키를 사용했습니다.


10

Windows 7의 Python 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 개) 있었지만이 키를 변경하여 작동했습니다.


5

다음은 Python 3.6, 2.7 및 Anaconda3 용으로 수정할 .reg 파일입니다.

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 (사용자 이름 변경)

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

흥미 롭군. Python 2.6 및 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

0

.py파일에 대한 프로그램 연결 이 엉망이 될 수 있습니다. .py파이썬 실행 파일과 파일을 다시 연결 하십시오.

마우스 오른쪽 단추로 클릭 .py파일> Open with> Choose default program ...> [C을 찾을 : \ PythonXY \ python.exe를]


항상 기본적으로 Python 3.6을 호출하므로 내 시스템에서 작동하지 않았습니다. 선택한 답은 작업 한
Aaron3468

Windows10 이후 문제가 있으므로 항상 작동하지 않습니다.
rundekugel

0

나는 모든 레지스트리 키를 확인 python.exe하고 py_auto_file그들을 일을 포함하여 내 현재 파이썬 설치를 가리 만들어 %*인수를 전달하는 말. 그들은 꽤 많았습니다.

  • HKEY_CLASSES_ROOT \ Applications \ python.exe \ shell \ open \ 명령 :

    • org : "C : \ miniconda3 \ python.exe" "% 1" "% *"
    • 변경됨 : "C : \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_CLASSES_ROOT \ py_auto_file \ shell \ open \ command

    • 조직 : "C : \ Program Files \ Sublime Text 3 \ sublime_text.exe" "% 1"
    • 변경됨 : "C : \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_CURRENT_USER \ Software \ Classes \ py_auto_file \ shell \ open \ command

    • org : "C : \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_USERS \ S-1-5-21-2621213409-1291422344-4183577876-2165 \ Software \ Classes \ py_auto_file \ shell \ open \ command

    • org : "C : \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_USERS \ S-1-5-21-2621213409-1291422344-4183577876-2165_Classes \ py_auto_file \ shell \ open \ command

    • org : "C : \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_CLASSES_ROOT \ Applications \ pythonw.exe \ shell \ open \ command

    • 조직 : "C : \ Python34 \ pythonw.exe" "% 1"
    • 변경됨 : "C : \ Python35 \ pythonw.exe" "% 1" "% *"
  • HKEY_CURRENT_USER \ Software \ Classes \ Applications \ python.exe \ shell \ open \ command

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

그러나 그것은 나를 위해 일하지 않았습니다. 기본 파이썬 응용 프로그램도 변경해야했습니다.

응용 프로그램 대화 상자

보시다시피 3 개의 Python 버전이 설치되어 있습니다. 여기에서 어느 것이 무엇인지 알 수 없으므로 세 가지 모두를 기본 Python 응용 프로그램으로 시도했습니다. 결국 저는이 세 가지 중 하나를 사용하여 대본 인수를 얻을 수있었습니다.


0

Windows 레지스트리를 살펴보면서 비슷한 것이 Python36\pythonw.exe "%1" %*나타나는 모든 위치를 찾았습니다 .

python app.py args명령 프롬프트에 입력하면 모든 것이 제대로 작동합니다.

앱 이름 ( app.py args) 만 사용하면 Windows는 Python에서 app.py를 열지 만 len (argv)가 1이기 때문에 argv [1]에 액세스하려고하면 앱이 실패합니다.

분명히 Windows는 py 파일을 Python에 전달할만큼 충분히 알고 있지만 레지스트리 항목을 살펴보면 명령을 구성하는 방법을 알 수 없습니다. "%1"대신 사용 하는 것 같습니다 "%1" %*.


0

다음 레지스트리 키를 편집하여 Windows 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함께 -files py.exe(하지 python.exe직접),이 의견의 몇 언급,하지만 난 차이를 강조하기 위해 별도의 답변으로이를 게시하기로 결정이 경우.

그래서 내 .py-files와 관련이 C:\Windows\py.exe있고 C:\Windows\py.ini구성에 몇 가지 shebang 정의가 있습니다.

[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>.

그리고 Microsoft Windows 7 [버전 6.1.7601]에서 내 python 스크립트 는 다음 과 같은 인수를받지 못했습니다.

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에 저장 하고 실행). 이 레지스트리 키 검색 "%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

작동하려면 Windows 10에서 수정해야했습니다 (마지막에 % *)

컴퓨터 \ HKEY_USERS \ S-1-5-21-2364940108-955964078-1358188674-1001 \ Software \ Classes \ Applications \ py.exe \ shell \ open \ command

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.