Development Tip

python 및 sys.argv

yourdevel 2020. 12. 6. 22:08
반응형

python 및 sys.argv


if len(sys.argv) < 2:
    sys.stderr.write('Usage: sys.argv[0] ')
    sys.exit(1)


if not os.path.exists(sys.argv[1]):
    sys.stderr.write('ERROR: Database sys.argv[1] was not found!')
    sys.exit(1)

이것은 내가 작업중인 코드의 일부입니다. 사용자가 입력하지 않으면 내가 말하려는 첫 번째 부분 python programname something은 종료됩니다.

두 번째 부분은 데이터베이스가 있는지 확인하려고합니다. 두 곳 모두에서 stderr로 sys.argv를 작성하는 올바른 방법이 있는지 확실하지 않습니다.


BTW 오류 메시지를 sys.exit에 직접 전달할 수 있습니다.

if len(sys.argv) < 2:
    sys.exit('Usage: %s database-name' % sys.argv[0])

if not os.path.exists(sys.argv[1]):
    sys.exit('ERROR: Database %s was not found!' % sys.argv[1])

Python에서는 임의의 Python 표현식을 리터럴 문자열에 포함하고 문자열 값을 대체하도록 할 수 없습니다. 다음 중 하나가 필요합니다.

sys.stderr.write("Usage: " + sys.argv[0])

또는

sys.stderr.write("Usage: %s" % sys.argv[0])

또한 print(3.x 이전의 Python의 경우) 의 다음 구문을 사용하는 것이 좋습니다.

print >>sys.stderr, "Usage:", sys.argv[0]

사용 print논증하는 코드를 읽기가 쉬워집니다. 파이썬은 print명령문의 인수 사이에 자동으로 공백을 추가 하므로 위의 예에서 콜론 뒤에 공백이 하나 있습니다.

Python 3.x에서는 다음 print함수를 사용합니다 .

print("Usage:", sys.argv[0], file=sys.stderr)

마지막으로 Python 2.6 이상에서는 다음을 사용할 수 있습니다 .format.

print >>sys.stderr, "Usage: {0}".format(sys.argv[0])

나는 이렇게 할 것이다 :

import sys

def main(argv):
    if len(argv) < 2:
        sys.stderr.write("Usage: %s <database>" % (argv[0],))
        return 1

    if not os.path.exists(argv[1]):
        sys.stderr.write("ERROR: Database %r was not found!" % (argv[1],))
        return 1

if __name__ == "__main__":
    sys.exit(main(sys.argv))

이를 통해 main()원하는 경우 다른 모듈로 가져올 수 있으며 무엇 argv선택할 수 있으므로 디버깅을 단순화 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/983201/python-and-sys-argv

반응형