0

참고 : 이미 모든 솔루션을 stackoverflow에서 시도했습니다!명령 줄 인수가 검색되지 않습니다.

Windows 10 및 Python 3.5를 사용하고 있습니다. 이 오류를 받고 있어요 :

Traceback (most recent call last): 
File "geiger_plot.py", line 236, in <module> 
    main() 
TypeError: main() missing 1 required positional argument: 'argv' 

내가 상상할 수있는 모든 명령을 사용하여 스크립트를 실행하려고 :

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

[HKEY_CLASSES_ROOT\Applications\pythonw.exe\shell\open\command] 
@="\"C:\\Program Files\\Python35\\pythonw.exe\" \"%1\" %*" 
:

geiger_plot.py test 
python geiger_plot.py test 
"C:\Program Files\Python35\python.exe" geiger_plot.py test 
"C:\Program Files\Python35\python.exe" C:\Users\Chaosuser\Desktop\GeigerLog\geiger_plot.py test test test 

은 이미 파이썬 명령 행 인수에 대한 레지스트리 항목을 고정을

(내 보낸 .reg이기 때문에 수천 개의 백 슬래시가 있습니다.) 스크립트 자체에서 나는 내가 아는 한 모든 것을 올바르게 만들었습니다. 다른 스크립트에서 인수를 사용하여 파일 경로 (logfile)를 전달하려는 스크립트입니다. 항상 오류가 발생하여 쉘에서 직접 실행하려고했습니다.

import sys 

def main(argv): 
    sys.argv 
    print(sys.argv) 
    logfile = str(sys.argv[1]) 

단지도 나에게 sys.argv 내 사용에 대한 오류를주고 거기에 도착하지 않습니다!

무엇이 잘못 되었나요?

def main(argv): 
    print(sys.argv) 
to 
def main(): 
    print(sys.argv) 

남자 ... 파이썬 다시 하드 너무 쉽게 구성되어 있습니다

솔루션은 argv를 제거했다!

+0

파이썬 ('메인라는 함수를 실행하지 않습니다)'자동 : 또한 주요 호출 할 필요가

def main(): print(sys.argv[1]) 

. 스크립트가 끝나면'main (sys.argv) '문으로 직접 호출하십시오. 스크립트가 다른 스크립트에 의해 임포트 될 수 있다면 ('main()'이 실행되는 것을 원하지 않을 경우)'if __name__ == '__main __':'을 사용하여 조건부로 만들 수 있습니다. – martineau

+0

'HKEY_CLASSES_ROOT'에 쓰지 마라. 이 키는 * reading *을 의미하는 병합 된 뷰입니다. 그것의 쓰기의 결과는 불확정하다. 업데이트하려는 정확한 하이브에만 국한하십시오 :'[HKLM | HKCU] \ SOFTWARE \ Classes'에 있습니다. 또한, 현재 사용자가'Applications \ python.exe' 서브 키를 사용하도록 실제로 설정되어 있다면, 파이썬 설치를 수정했습니다. Python.File'과 python.NoConFile'을 사용해야합니다. py [w] .exe 런처를 사용해야합니다. 사용자 선택은 여기 (읽기 전용) :'HKCU \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \ .py \ UserChoice'입니다. – eryksun

+0

eryksun이 작업을 수동으로 수행하고 regedit의 내보내기 기능을 사용하여 다른 사람들과 공유 할 수있는 키를 얻었습니다. 이것은 어떻게 : [HKLM | HKCU] 특정? 나는 python.file과 python.noconfile을 살펴 보았고 처음부터 괜찮았다. Theres no py.exe 또는 pyw.exe, 내 경우에는 python.exe – Distelzombie

답변

0

는 메인 서명에서 argv 매개 변수를 제거하고 단지 sys.argv[1] 사용

if __name__ == '__main__': 
    main() 
+0

"mains signature"란 무엇입니까? def main (argv) :? 스크립트가 끝날 때 sys.argv를 넣었던가요? 차이점이 뭐야? – Distelzombie

+0

네, 그것이 mains 서명에 의한 것입니다. 방금 답을 더 명확하게 편집했습니다. – Jay

+0

하단에'if __name__ == '__main __':'이 이미 있습니다. 하지만 아마도 argv를 서명에서 제거해야합니다. 아프다. 예, 해결책이었습니다. fgs, 너무 간단 ... – Distelzombie

관련 문제