Guido van Rossum라는 사람이 쓴 Python main() functions라는 문서는 Python에서 EntryPoint를 어떻게 작성할 것인지에 대한 흥미로운 제안을 하고 있습니다. 우선 아래의 두 소스 코드를 봅시다.
최초의 소스코드
import sys
import getopt
def main():
# parse command line options
try:
opts, args = getopt.getopt(sys.argv[1:], "h", ["help"])
except getopt.error, msg:
print msg
print "for help use --help"
sys.exit(2)
# process options
for o, a in opts:
if o in ("-h", "--help"):
print __doc__
sys.exit(0)
# process arguments
for arg in args:
process(arg) # process() is defined elsewhere
if __name__ == "__main__":
main()
수정한 소스코드
import sys
import getopt
class Usage(Exception):
def __init__(self, msg):
self.msg = msg
def main(argv=None):
if argv is None:
argv = sys.argv
try:
try:
opts, args = getopt.getopt(argv[1:], "h", ["help"])
except getopt.error, msg:
raise Usage(msg)
# more code, unchanged
except Usage, err:
print >>sys.stderr, err.msg
print >>sys.stderr, "for help use --help"
return 2
if __name__ == "__main__":
sys.exit(main())
def main():이main(argv=None):와 같이 바뀌었습니다. 이는 Interactive Python prompt에서 main 함수를 호출할 수 있도록 합니다.main(argv=sys.argv):와 같이 바꾸는 방법도 고려해볼만 합니다. 하지만 main 함수가 호출될 때마다sys.argv값이 변할 수 있기 때문에 전자가 낫습니다.- main 함수 내에서
sys.exit()를 호출한다면 Interactive Python이 종료되어 버립니다. 이것은 아주 짜증나는 일일 것입니다. 그러므로 main 함수는 exit status 값만 반환하도록 작성되어야 합니다. 이것이sys.exit(main())의 의미입니다.
Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.