커스텀 프로토콜 핸들러와 URI 스킴 만들기! - 1 부
4200 단어 pythonpythonprojectsprojects
소개
이 미니시리즈에서는 사용자 지정 URI 체계 또는 URI와 해당 URI에 대한 프로토콜 처리기를 만드는 방법을 알려 드리겠습니다. 그러한 URI의 예는
vscode:///
입니다! VS Code를 사용하여 GitHub에 로그인하려고 할 때 이것을 보았을 것입니다. 맞습니까? 그러나 우리는 이것을 정확히 만들지 않을 것입니다. 약간 다릅니다! 완성품은 아래와 같습니다!완제품?
자, 그럼 실제로 무엇을 만들까요? 글쎄, 우리는 브라우저에서 바로 컴퓨터의 모든 python 스크립트를 실행할 수 있는 프로토콜
python://
을 만들 것입니다! 멋지지 않아? 그리고 아마도 미래에는 인터넷에서 모든 파이썬 파일을 실행할 수 있도록 만들 수 있습니다! 완성된 제품의 영상은 아래와 같습니다! 품질이 좋지 않아 죄송합니다. 기사 안에 들어갈 수 있도록 Hashnode를 위해 줄여야 했습니다!그래서, 우리는 오늘 무엇을 만들고 있습니까?
오늘 우리는 urllib를 사용하여 파이썬에서 기본 핸들러를 만들 것입니다! 저는 Python 3을 사용할 것이지만 urllib2 모듈을 사용하여 Python 2로 쉽게 번역할 수 있습니다! 시작하겠습니다!
전제 조건
실제 코드!
글쎄, 이 포스트에서 우리는 기본적인 핸들러를 만들 것이다. 스크립트 실행은 다음 포스트에서 할 것이다!
수입품
import urllib.request as urlreq
from io import StringIO as strio
프로토콜 주소를 파싱하고 핸들러를 생성하려면 urllib.request가 필요합니다! 우리는 다음 포스트에서 StringIO가 필요하지 않을 것입니다. 이것은 단지 이 포스트를 위한 것입니다!
핸들러
자, 가져오기가 완료되었으므로 이제 실제 핸들러로 이동하겠습니다! 이것은 아주 기본적인 객체지향 프로그래밍(OOP)을 사용할 것이므로 익숙하지 않더라도 문제가 없을 것이지만, 익숙하다면 도움이 될 것입니다!
class PyProtoHandler(urlreq.BaseHandler):
def python_open(self, req):
fullUrl = req.get_full_url()
return strio(fileUrl)
그래서 위의 코드에서
PyProtoHandler
에서 상속받은 urllib.request.BaseHandler
라는 클래스를 만들었습니다. 이 클래스 내에서 python_open
라는 새 함수를 정의합니다. 이 함수는 1개의 매개변수 req
를 취하지만 여기에 중요한 비트가 있습니다. 이 함수는 특정 방식으로 이름을 지정해야 합니다. 즉, {the protocol name}_open
입니다. 예를 들어 함수를 myproto_open
로 정의하고 실제 프로토콜이 protomy
인 경우 오류가 발생하므로 이것을 염두에 두십시오!그런 다음
req.get_full_url()
에서 반환한 전체 URL을 fullUrl에 저장합니다. 마지막으로 StringIO로 래핑된 반환fullUrl
입니다.핸들러 설치
자, 핸들러가 만들어졌으니 설치하고 빌드해보자. 이 단계는 정말 간단합니다. urllib의 내장 함수 2개만 호출하면 됩니다!
opener = urlreq.build_opener(PyProtoHandler())
urlreq.install_opener(opener)
따라서
urlreq.build_opener(PyProtoHandler)
를 사용하여 오프너를 빌드하고 반환된 결과 또는 출력을 변수 opener
에 저장합니다. 다음으로 opener
를 사용하여 urlreq.install_opener(opener)
를 설치합니다. 그리고 우리는 끝났습니다! 비올라! 자, 테스트를 해보자!핸들러 테스트
이 파일과 함께 다른 코드 줄을 사용하여 테스트할 것입니다!
print(urlreq.urlopen("python://something/random/file.txt").read())
이제 테스트하려면 터미널이나 Bash 또는 명령 프롬프트에서 원하는 대로 파일을 실행해야 합니다! 시스템에 따라
python
또는 python3
를 사용해야 할 수도 있습니다.$ python protoHandler.py
python://something/random/file.txt
코드를 변경하여 파일을 다시 실행합니다.
print(urlreq.urlopen("python://hashnode/non-existing/dir/non/existing/file.py").read())
그리고 출력:
$ python protoHandler.py
python://hashnode/non-existing/dir/non/existing/file.py
끝 파일 경로를 가져옵니다!?
여기에 이것을 포함시킬 것이라고 생각하지 않았지만 마침내 포함했습니다! 그럼 즐감하세요 여러분!
자, 이제 우리는 전체 프로토콜을 얻을 수 있고, 이제 파일의 경로를 추출할 수 있습니다.
class PyProtoHandler(urlreq.BaseHandler):
def python_open(self, req):
fullUrl = req.get_full_url()
filePath = "".join(fullUrl.split("://")[1:])
return filePath
그래서 보시다시피
python_open
함수에 한 줄을 추가했습니다. 프로토콜을 목록으로 분할합니다. 여기서 첫 번째 요소는 프로토콜("python")이고 두 번째 요소는 파일 경로입니다. 그리고 우리는 그것을 "".join()
로 감싸서 경로를 문자열로 변환하고 ""를 구분 기호로 사용하여 인덱스 1에 있는 요소의 앞뒤 모든 요소를 결합합니다. 올바른 경로가 입력되면 인덱스 1에 하나의 요소가 있어야 하지만.마지막으로, 끝
2부가 아직 남아 있기 때문에 이것을 끝이라고 해서는 안 됩니다! 어쨌든 오늘은 안녕히 가세요. 메일링 리스트를 구독하시면 제가 2부를 올릴 때 알림을 받을 수 있습니다! 잘자요!
Reference
이 문제에 관하여(커스텀 프로토콜 핸들러와 URI 스킴 만들기! - 1 부), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pybash/making-a-custom-protocol-handler-and-uri-scheme-part-1-37mh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)