Gustavo에 플래그 지원 추가
6936 단어 pythonopensource
슬레이트레이터 / 구스타보
파일에 있는 모든 HTTP URL의 컬러 보고서를 인쇄합니다.
Gus는 add windows & unix style command line arguments에게 최근 PR을 받았습니다. 이 PR이 병합되면 Gus는 다음을 승인하고 수행할 수 있습니다.
$ python gus.py -f some.file // checks the URLs in some.file
$ python gus.py -v // shows version info
$ python gus.py -h // shows usage instructions
--file
, --version
및 --help
도 작동합니다.훌륭한 시작인데 왜 거기서 멈추나요? Gus가 더 많은 인수를 처리하기를 원했기 때문에 일련의 조건문을 통해 문자열을 확인
sys.argv
하는 것은 더 이상 의미가 없습니다. 나는 이 무거운 짐을 들어주기 위해 argparse을 수입하기로 결정했습니다.가장 먼저 한 일은 프로그램의 기본 출력을 변경하는 것이었습니다. 서식 있는 텍스트 파일을 자동으로 생성하는 대신 콘솔에 대한 출력이 표준이 됩니다. 사용자가 리치 텍스트 파일을 출력으로 원하는 경우 Gus를 전달할 수 있습니다.
-r
또는 --rtf
명령줄에서.다음으로 요청에 대해 http.client 라이브러리를 교체하여 검사기 기능을 업데이트했습니다. 코드와 설명을 사전으로 반환하므로
get_status_code()
를 get_status()
로 이름을 변경했습니다. 출력 형식(콘솔 또는 RTF)을 결정할 때 이것이 도움이 될 것이라고 생각했습니다.def get_status(url):
try:
conn = requests.head(url, timeout=2.5)
code = conn.status_code
series = str(code)[0]
desc = 'UNKN'
if series == '2':
desc = 'GOOD'
elif series == '4':
desc = 'FAIL'
return {'code':code, 'desc':desc}
except: # all exceptions default to status == 400
return {'code':400, 'desc':'FAIL'}
계속 진행하기 전에 지적하고 싶은 한 가지는... 모든 예외가
status == 400
로 기본 설정되는 방식에 주목하십시오. 저는 이것이 마음에 들지 않아서 new issue to improve exception handling 을(를) 열었습니다. 가까운 장래에 저(또는 다른 사람 🤞)가 이 작업을 할 시간이 있기를 바랍니다.사용자가 어떤 출력 형식을 선택하든 모든 URL을 확인한 후에 표시하거나 생성하기로 결정했습니다. Gus는 아직 스레딩을 활용하지 않기 때문에 다소 시간이 걸릴 수 있습니다. Gus가 오래 걸리는 경우 진행 상황을 보여줌으로써 모든 것이 괜찮다는 것을 사용자에게 보여주고 싶었습니다. 약간의 연구 끝에 나는 다음을 생각해 냈습니다.
print(f'\r Checking URL {list.index(string)} of {len(list)}', end="\r")
for 루프에 위의 인쇄 문을 넣으면 각 반복이 자신을 덮어쓰고 한 줄의 진행률 업데이트를 사용자에게 제공합니다.
모든 것이 예상대로 작동하면 두 가지 새로운 기능을 개발하기 위해 두 개의 새 분기를 만들었습니다.
이 시점에서 저는 argparse이 탑승하게 되어 매우 기뻤습니다. Argparse가 이미 문자열 매개변수
output
를 기본 함수로 보내고 있었습니다. output
의 값은 "std"또는 "rtf"일 수 있으며 "json"을 믹스에 추가하는 것은 쉬웠습니다.--all
, --good
및 --bad
플래그를 지원하기 위해 argparse는 목록 매개변수wanted
를 기본 함수에 보내야 했습니다. 기본적으로 wanted
목록은 다음과 같습니다.['GOOD','FAIL', 'UNKN']
--good
또는 --bad
를 전달하면 그에 따라 위 목록의 값이 제한됩니다. 모든 경우에 wanted
의 값은 get_status()
에서 반환된 사전과 비교하여 확인되며 일치하는 항목이 있으면 나중에 출력할 수 있도록 형식이 지정된 문자열이 저장됩니다.많은 함수가 사용자의 출력 선택이 무엇인지 알아야 하므로 함수에서 함수로 전달하는 대신 전역 변수로 만들기로 했습니다. 이것이 잘못된 형식인지는 확실하지 않지만 코드가 꽤 깨끗해 보이고 모든 것이 의도한 대로 작동했습니다.
현재까지 Gus의 모든 옵션은 다음과 같습니다.
명령줄 인수
설명
-f 파일 이름, --파일 파일 이름
확인할 소스 파일의 위치
-a, --모두
출력에는 모든 결과가 포함됩니다(기본값).
-g, --좋음
출력에는 [GOOD] 결과만 포함됩니다.
-b, --나쁜
출력에는 [FAIL] 결과만 포함됩니다.
-r, --rtf
채색된 리치 텍스트 파일로 출력
-j, --json
JSON으로 출력
-h, --도움말
도구 사용 방법에 대한 정보 표시 및 종료
-v, --버전
프로그램의 버전 번호를 표시하고 종료
어려운 부분은 두 가지를 병합하는 것이었습니다. 재귀적 3자 머지를 하려고 했는데 결국 개밥이 되었네요... 머징을 망친건 확실한데 제가 원하는 코드가 깃헙에 올라와 있어서 하소연을 못하겠네요. Gus에 대해 두 가지 기능이 더 계획되어 있으므로 곧 다시 분기를 병합하려고 합니다.
Reference
이 문제에 관하여(Gustavo에 플래그 지원 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/slaterslater/adding-flag-support-to-gustavo-3aph텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)