2012-07-20 3 views
0

이것은 매우 간단해야하지만, 심각한 문제가 있습니다. 사용자 입력이 2 글자 표현식과 일치하는지보고 싶습니다. 내가 가진 가장 큰 문제는 내가 다시 라이브러리에 익숙하지 않다는 것, 그리고 문서화가 너무 많은 도움이되지 않는다는 것입니다. Python : 문자열과 sys.argv를 비교하십시오.

내가 지금까지 시도한 것입니다 :

1

if re.match(sys.argv[3], "GL", re.I): 
    input_file_path = "V:\\test" 

시도 2 ​​

if re.ignorecase(sys.argv[3], "GL"): 
    input_file_path = "V:\\test" 

3

if sys.argv[3] == "GL": 
    input_file_path = "V:\\test" 

내가 프로그램을 호출하는 방식하려고 시도 실행 : filename.py 테스터 테스트 GL "테스터"및 "테스트"는 아직 실제로 사용되지 않습니다.

편집 : 내 주요 문제를 발견했습니다. elif보다는 if 문을 많이 호출했습니다. 마지막으로 else : exit()는 항상 히트를 쳤다. 신인 실수

+2

스크립트의 이름을 sys.argv [0]로 기억하는 것을 잊지 않았습니까? – Trevor

+1

1)'domain '은'sys.argv [3]'과 같은가요?2) 문자열이 정확히 "GL"과 일치해야한다면, 훨씬 더 일반적인 비교를 위해're' 모듈을 사용하지 않아도됩니다. try 3에서와 같이 간단한 문자열 비교를 사용하십시오. – chepner

+0

@ Trevor 예, sys.argv [3]를 인쇄하면 GL이 인쇄됩니다. 예, 도메인이 동일합니다 (그 부분을 편집했습니다) – LiverpoolFTW

답변

7

그냥 비교하기 전에 소문자로 테스트 할 수있는 문자열을 변환하면 괜찮을 것 :

if sys.argv[3].lower() == "gl": 
    input_file_path = "V:\\test" 

더 특히, 정규 표현식이 작업에 적합한 도구 아니다.

+0

이것이 작동한다면,'try 1'이 효과가 있었을 것이라고 생각했을 것입니다. (비록 이것은 확실히 더 좋지만). – mgilson

+0

@mgilson : 그는 매개 변수의 순서가 섞여 있고, 패턴이 먼저오고, 일치하는 문자열이 두 번째가됩니다. –

+0

@TimPietzcker 나는 re.match (대 재검색)로 앵커링에 대해 알고 있었다. (이 답변은 문자열의 처음과 끝 부분에 비교를 앵커한다.) 매개 변수의 순서는 생각하지 않았지만 정확합니다. 감사. – mgilson

0

분명히 세 번째 인수는 'GL'이 아닙니다. print sys.argv 그리고 당신은 그것을 볼 수 있습니다. 내 추측은 당신이 당신의 지수에서 하나 떨어져 있다는 것입니다.

스크립트를 실행하는 데 사용하는 명령 줄을 표시하십시오.


은 인쇄 허용 sys.argv에 [3] 인쇄물은 정확히 GL - LiverpoolFTW


나서 버그 곳이다. 바로 전에 sys.argv[3].lower() == "gl"을 인쇄하고 input_file_path을 인쇄하면 예상 값이 표시됩니다. 여기서 정말로 필요한 것은 디버거입니다. pdb은 기본 제공 표준이지만 pudb을 적극 권장합니다.

빠른 설정을 위해 터미널에 붙여 넣으십시오. virtualenv은 프로젝트 종속성을 별도로 유지하기위한 업계 표준입니다.

cd ~ 
wget https://raw.github.com/pypa/virtualenv/1.6.3/virtualenv.py 
python virtualenv.py mypy 
source mypy/bin/activate 
pip install pudb 

activate 파일을 사용하면 환경에 싶어 할 때마다 소스. 꺼내려면 (activate으로 정의 된 별칭)을 실행하십시오. 특정 파이썬 인스턴스를 하드 코딩하는 대신 환경 (예 : #!/usr/bin/env python)에서 파이썬을 사용해야합니다.

+1

sys.argv를 인쇄하면 [3] 정확히 GL이 인쇄됩니다. – LiverpoolFTW

2

귀하의 re.match가 역순입니다. 패턴이 먼저옵니다. 시도해보십시오 :

if re.match('GL', sys.argv[3], re.I): 
    input_file_path = "V:\\test" 
관련 문제