2012-04-23 2 views
5

제목이 설명이 아니므로 여기에서 설명 드리겠습니다.Windows에서 PATH에서 실행할 때 인수가 손실되는 Python 스크립트

는 일반적으로 나는이처럼 내 파이썬 스크립트를 실행 : 내 창문 path 환경 변수에 폴더 D:\github\Miscellaneous-Programs\Python을 추가했다 이제 어떻게

D:\github\Miscellaneous-Programs\Python>python check.py -h 
hello 
['check.py', '-h'] 

. 내가 이렇게 내 스크립트를 실행하려고보다 :

C:\Users\noob>check -h 
hello 
['D:\\github\\Miscellaneous-Programs\\Python\\check.py'] 

를 보시다시피 그것이 내가에 공급되는 -h 인수를 보여 주었다하지 않았다.

내 내가 위에서 언급 한 파이썬 스크립트에서 print sys.argv을 제거하면 그것이 내가 즉 위에서 언급 한 두 경우 모두에서 잘 작동 check.py

import sys 
print "hello" 
print sys.argv 

, 그것은 "안녕하세요"잘 인쇄합니다.

그래서 내 질문은 환경 변수에 스크립트를 추가 한 후 일부 명령 줄 인수를 허용하는 python 스크립트를 어떻게 실행하는지입니다.

내 목적은 chmod +x check.py과 다소 비슷한 windows 명령 프롬프트에서 내 python script을 실행하는 것입니다.

cygwin에서 chmod 옵션을 시도했지만 두 경우 모두 정상적으로 작동합니다.

Cygwin output

[email protected] ~ 
$ chmod +x check.py 

[email protected] ~ 
$ ./check.py h 
['./check.py', 'h'] 
+2

'python full \ path \ to \ check.py'를 포함하는 .bat 파일을 만들고'Path'에 해당 .bat가 들어있는 디렉토리를 추가하십시오 (.bat의 시작 부분에'echo off ' – khachik

+0

"PATH에서 Python 스크립트를 실행하면 첫 번째 명령 줄 인수를 제외한 모든 항목이 삭제되므로"동일한 문제가있는 다른 사용자도 찾을 수 있도록 좀 더 자세한 설명이 포함 된 제목을 변경하는 것이 좋습니다. – mensi

+0

정말 그랬습니까? 'C : \ Users \ noob> check -h'가 C : \ Users \ noob> check.py -h'가 아닌가요? –

답변

6

윈도우 그래서 당신은 할 의도 무엇을 작동 할 수 없습니다하는 #!로 주어진 인터프리터로 실행 스크립트 파일의 개념이 없습니다. 그러나, 더 일반적으로 특정 파일에서 작동하는 응용 프로그램을 실행하는 데 사용됩니다

: 무엇 Windows와는 다음을 수행하는 WinAPI를 기능 ShellExecute를 호출하는 것입니다. 예를 들어 .txt 파일은 Microsoft 워드 패드에서 으로 열 수 있습니다. .txt 파일에 대한 열기 동사 따라서 다음 명령과 같이에 해당하는 것입니다 : 당신이 볼 수 있듯이, 단지 첫번째 매개 변수는 응용 프로그램에

"C:\Program Files\Windows NT\Accessories\Wordpad.exe" "%1" 

see MSDN

을 제공한다.

python check.py %* 

(자세한 내용은 this SO question를 참조하십시오 : 당신이 check.bat라는 이름의 작은 .bat 파일을 만드는 것입니다 피하기 위해 할 수있는 일

"C:\Program Files\Python\Python.exe" "D:\github\Miscellaneous-Programs\Python\check.py" 

: 귀하의 경우,이의 라인을 따라 뭔가로 변환 또한 확인을 위해 절대 경로를 제공해야 할 수도 있습니다.py 또는 python을 찾을 수없는 경우)

+0

답장을 보내 주시면 제안에 따라 답변을 드릴 수 있습니다. 다른 대안을 기다리는 답변에 동의 할 것입니다 : D – RanRag

+0

* Windows에는 실행 가능한 스크립트 파일 개념이 없습니다. 인터프리터는 #!로 주어지기 때문에 의도 한대로 작동하지 않을 수 있습니다. * Windows에는 실제로 shebang이라는 개념이 없지만 명령 행에서 이름을 지정하여 다양한 스크립트를 실행할 수있는 것은 아닙니다. Btw, 거기에 Windows에서 - - 파이썬 실행기 (https://bitbucket.org/vinay.sajip/pylauncher/) shebang 작동하게 좋은 도구입니다. –

+0

'ShellExecute'는'script.py -h'와 같은 명령을 실행하는 과정에서 시스템이 사용하는 WinAPI 함수이며 시스템이이 함수를 어떻게 사용하는지 알지 못해서 전체 프로세스를 설명 할 수 없습니다. 답이 잘못되었습니다. –

4

에 폴더를 두어도 명령 줄에서 script.py -h을 작성하여 일부 스크립트를 실행할 때 시스템이 작동하는 방식에 영향을주지 않습니다. 시스템이 레지스트리를 읽어서 사용자가 지정한 명령을 실행하는 방법을 찾습니다. 먼저 reg query HKCR\.py /ve을 실행 한 다음 결과 (일반적으로 Python.File)와 reg query HKCR\Python.File\shell\open\command /ve을 실행하여이 정보를 표시 할 수 있습니다. 내 시스템의 출력은 "C:\Program Files\Python Launcher (64-bit)\py.exe" "%1" %*입니다. 이것은 시스템이 script.py -h 명령을 보았을 때 py.exe 프로그램을 실행하고 첫 번째 매개 변수는 스크립트 이름 (즉, "%1" 의미)이고 나머지 매개 변수는 스크립트에 주어진 매개 변수 (즉, %*)의 의미임을 나타냅니다. 귀하의 문제는 %* 부분이 apropriate 레지스트리 항목에 없기 때문에 발생했습니다.

+0

''regquery' :'(기본값) REG_SZ "C : \ Python26 \ python.exe" "% 1"% *'에 대한 내 출력물. 그래서. '% *'가 부족하지 않습니다. – RanRag

+0

이것은 나에게 도움이되는 슈퍼였습니다. – class

+0

필자는 최근까지만이 문제가 발생하지 않았지만 최근 Python Launcher가 포함 된 새 컴퓨터에 Python 3.4를 설치했습니다.이 대답 덕분에'.py' 파일의 레지스트리 항목 (파일 클래스' py_auto_file')이'% *'없이 추가되었습니다. – JAB

관련 문제