반응형
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
반응형
'Development Tip' 카테고리의 다른 글
ngModel을 사용하여 부모 formGroup 지시문으로 양식 컨트롤을 등록 할 수 없습니다. (0) | 2020.12.06 |
---|---|
Kotlin 코 루틴이 RxKotlin보다 얼마나 나은가요? (0) | 2020.12.06 |
.NET 타이머가 15ms 분해능으로 제한되는 이유는 무엇입니까? (0) | 2020.12.05 |
Visual Studio없이 Visual C ++ 명령 줄 컴파일러를 다운로드 할 수 있습니까? (0) | 2020.12.05 |
호스팅 된 TeamCity 빌드 공급자를 아는 사람이 있습니까? (0) | 2020.12.05 |