2008-10-14 2 views
2

는 다음 스크립트파이썬

import getopt, sys 
opts, args = getopt.getopt(sys.argv[1:], "h:s") 
for key,value in opts: 
    print key, "=>", value 

입니다 한 내가 거기 방법이 주위에, 그래서이 파일 이름을 유지할 수 있지만 표준 파이썬 lib 및이 파일을 원하는 가져 오기 지정하십시오? Vinko의 답변에 따라

솔루션 :

import sys 
sys.path.reverse() 
from getopt import getopt 

opts, args = getopt(sys.argv[1:], "h:s") 

for key,value in opts: 
    print key, "=>", value 

답변

7

기존 모듈과 같은 스크립트 이름을 지정하면 안됩니다. 특히 표준 경우.

라이브러리 로딩 순서를 수정 sys.path에 접촉 할 수 말했다

~# cat getopt.py 
print "HI" 
~# python 
Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52) 
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> import getopt 
HI 

~# python 
Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52) 
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.path.remove('') 
>>> import getopt 
>>> dir(getopt) 
['GetoptError', '__all__', '__builtins__', '__doc__', '__file__', '__name__', 'do_longs', 'do_shorts', 'error', 'getopt', 'gnu_getopt', 'long_has_args', 'os', 'short_has_arg'] 

또한, 당신은 전체 가져 오기를 방지 할 수 있으며, 그것은 다음과 같이 다르게 수행

import sys 
sys.path.remove('') 
from getopt import getopt 
sys.path.insert(0,'') 
opts, args = getopt(sys.argv[1:], "h:s") 
for key,value in opts: 
    print key, "=>", value 
+0

@ 대니얼즈 : 여기 http://www.python.org/dev/peps/pep-0328/ –

+0

참조하십시오. 나는 그것을 더 나은 것 같아 sys.path.reverse() 사용 그것은 아마도 현재 폴더에있는 다른 lib를 가져올 필요가 있기 때문에 그것을 제거합니다 당신의 조언을 기반으로 발견 솔루션으로 내 질문을 업데이 트합니다 그것은 작동하지만 내 생각에 사악 해. 훨씬 더 libs – daniels

-1
import getopt as bettername 

이 당신이 bettername로 getopt를 호출 할 수 있습니다.

+0

그래도 무언가를 개발할 때 – daniels

4

표준 라이브러리 모듈 이름으로 파이썬 파일의 이름을 지정하지 마십시오.

+0

라이브러리는 가져 오지 못합니다 (getopt.py). 그러나 이것은 단지 호기심입니다. 포럼에있는 누군가가이 문제를 겪었으며이 문제를 해결할 수있는 방법이 있다면 골동품입니다. – daniels

+0

@daniels : 고유 이름 사용 - 있습니다. –

+0

불행히도 새로운 표준 라이브러리 이름이 등장하기 때문에이 조언을 따르기가 어렵습니다 ... "전자 메일"모듈과 "uuid"모듈에서 두 번째로 물었습니다 .- ( – bortzmeyer

0

파이썬은 모듈을 한정하는 방법을 제공하지 않습니다. sys.path에서 " '항목을 제거하거나 끝까지 이동하여이 작업을 수행 할 수 있습니다. 나는 그것을 추천하지 않을 것이다.

0

글쎄, 라이브러리의 수정 가능한 검색 경로가 포함되어있는 sys.path에서 현재 디렉토리를 옮겨서 (실제로) 필요하다면 작동하도록 할 수 있습니다.