Python sys.argv 사용법 - python sys.argv sayongbeob

파이썬으로 작성된 파일을 실행할 때 인수(argument, 인자값)를 받아서 처리를 해야 되는 경우가 있다. 예를 들어, 로컬과 개발 등의 환경이 서로 달라서 인자값을 줘야 한다던지 같은 파일을 다른 목적으로 처리를 해야 할 때 인자값을 줄 수가 있을 것이다. 이럴때 파이썬에서는 sys.argv에 값을 담아 처리를 할 수 있게 된다.

sys.argv에서 sys는 파이썬 인터프리터와 관련된 정보와 기능을 제공하는 모듈 혹은 라이브러리이며, argv는 위에 적은 것처럼 argument를 의미한다. 

파이썬에서 명령행 인자값 받기

예시

python hello.py neo

첫번째로 위와 같은 command에서 실행을 한다고 가정을 하며 hello.py 다음에 1개의 인자값을 줬는데 neo라는 인자값이다. 이 인자값을 어떻게 프로그램이 처리를 하는지 알아보도록 한다.

import sys print(sys.argv)

hello.py에 위와 같이 sys라는 라이브러리를 import 한 후, sys.argv라는 것을 print로 출력해보았다.

(base) C:\python>python hello.py neo ['hello.py', 'neo']

sys.argv를 프린트로 출력을 할 경우 이와 같이 python 이후에 작성된 인자값들이 모조리 출력되고 있다. 즉 neo만 출력된 것이 아니라 hello.py도 출력이 된다는 것을 명심해야 된다. 우리가 보통 필요한건 hello.py 이후에 나오는 인자값들만 필요할테니 이럴때는 다음과 같이 출력해본다.

import sys for v in range(1, len(sys.argv)): print(sys.argv[v]) #neo

이렇게 값을 조절할 경우, 1번째부터 값을 출력할 수 있다. 그러나 인자값을 준다는 것은 개발자 혹은 운영자가 인자값의 위치마다 어떤 값을 넣어야 될지 명확하게 알고 있다는 의미이니 이번에는 명확하게 안다는 전제하여 인자값을 보편적으로 주는 방법을 테스트 해본다.

보편적으로 인자값을 받는 방법

import sys val1 = int(sys.argv[1]) val2 = int(sys.argv[2]) print(val1, ' 곱하기 ', val2, ' 은? ', (val1*val2))(base) C:\python> python hello.py 3 4 3 곱하기 4 은? 12

위 예시는 인자값을 여러개(2개) 받았으며 값을 명확히 알고 있어서 처리를 하는 방식이다. 이와 같은 방법이 훨씬 많이 사용이 되며 아규먼트를 받게 되면서 매우 간단한 프로그램이 폭넓게 사용될 수 있을 것이다.

파이썬 스크립트 실행시 인자값을 전달받아 실행하면 편리한 경우가 많습니다. 어느언어에서든 명령행 인자를 통해서 값을 넘겨줄 수 있는데요. 파이썬에서 명령행 인자를 받는 방법은 아래와 같습니다.

import sys file_path = sys.argv[1] if len(sys.argv) != 2: print("Insufficient arguments") sys.exit() print("File path : " + file_path)

실행

>>> python test.py /home/limcode/test.json "File path : /home/limcode/test.json

위 예제 코드에서 보듯이 python 스크립트의 명령행 인자들은 argv 배열에 전달됩니다. argv[0]에는 실행하는 스크립트의 경로가 담겨 있고, argv 배열의 1번째 원소부터 인자로 전달되는 값들을 저장하고 있습니다. 

len(sys.argv)

len(argv)를 하면 실행파일 1개를 더한 명령행에 전달된 인자의 수를 출력합니다. 위의 예제에서는 test.py /home/limcode/test.json 두 개의 값이 저장되어 있으므로 argv 배열의 길이는 2입니다.

import sys for arg in sys.argv: print(arg)

위의 코드는 인자값으로 전달된 모든 인자값들을 출력합니다.

점프 투 파이썬 - 라이브러리 예제 편 00장 들어가기 전에 00-01 머리말 00-02 저자소개 00-03 주요변경이력 00-04 책 구입 안내 00-05 이 책을 읽기 전에 01장 텍스트 다루기 001 문자열을 줄여 표시하려면? ― textwrap.shorten 002 긴 문장을 줄 바꿈하려면? ― textwrap.wrap 003 정규표현식으로 개인정보를 보호하려면? ― re 02장 바이너리 데이터 다루기 004 C로 만든 데이터를 출력하려면? ― struct 03장 다양한 데이터 다루기 005 날짜를 계산하고 요일을 알려면? ― datetime.date 006 두 날짜의 차이를 알려면? ― datetime.timedelta 007 2월이 29일인 해를 알려면? ― calendar.isleap 008 앞뒤에서 자료를 넣고 빼려면? ― collections.deque 009 자료에 이름을 붙이려면? ― collections.namedtuple 010 사용한 단어 개수를 구하려면? ― collections.Counter 011 딕셔너리를 한 번에 초기화하려면? ― collections.defaultdict 012 수상자 3명을 선정하려면? ― heapq 013 데이터를 보기 좋게 출력하려면? ― pprint 014 점수에 따른 학점을 구하려면? ― bisect 015 숫자에 이름을 붙여 사용하려면? ― enum 016 수강할 과목의 순서를 구하려면? ― graphlib.TopologicalSorter 04장 수학과 숫자 다루기 017 과자를 똑같이 나누어 담으려면? ― math.gcd 018 버스가 동시에 도착할 시각을 알려면? ― math.lcm 019 소수점을 정확하게 계산하려면? ― decimal.Decimal 020 분수를 정확하게 계산하려면? ― fractions 021 로또 번호를 뽑으려면? ― random 022 시험 결과의 평균값과 중앙값을 알려면? ― statistics 05장 함수형 프로그래밍 다루기 023 상담원을 순서대로 배정하려면? ― itertools.cycle 024 연간 매출액을 계산하려면? ― itertools.accumulate 025 키값으로 데이터를 묶으려면? ― itertools.groupby 026 부족한 것을 채워 묶으려면? ― itertools.zip_longest 027 순서를 생각하며 카드를 뽑으려면? ― itertools.permutations 028 로또의 모든 가짓수를 구하려면? ― itertools.combinations 029 순서대로 좌표를 정렬하려면? ― functools.cmp_to_key 030 웹 페이지를 임시로 저장하려면? ― functools.lru_cache 031 기존 함수로 새로운 함수를 만들려면? ― functools.partial 032 함수를 적용하여 하나의 값으로 줄이려면? ― functools.reduce 033 래퍼 함수의 속성을 유지하려면? ― functools.wraps 034 다양한 기준으로 정렬하려면? ― operator.itemgetter 06장 파일과 디렉터리 다루기 035 파일 경로를 객체로 다루려면? ― pathlib 036 디렉터리의 구성을 알려면? ― os.path 037 여러 개의 파일을 한꺼번에 읽으려면? ― fileinput 038 디렉터리와 파일을 비교하려면? ― filecmp 039 임시로 만든 파일을 이용하려면? ― tempfile 040 파일을 찾으려면? ― glob 041 특정 파일만 찾으려면? ― fnmatch 042 파일에서 무작위로 한 줄만 가져오려면? ― linecache 043 파일을 복사하거나 이동하려면? ― shutil 07장 데이터 저장하고 관리하기 044 객체를 파일로 저장하고 불러오려면? ― pickle 045 객체 변경에 따른 오류를 방지하려면? ― copyreg 046 딕셔너리를 파일로 저장하려면? ― shelve 047 블로그 데이터를 저장하려면? ― sqlite3 08장 데이터 압축하고 보관하기 048 데이터 크기를 줄여 전송하려면? ― zlib 049 데이터를 압축하여 파일로 저장하려면? ― gzip 050 bzip2 알고리즘으로 압축하려면? ― bz2 051 LZMA 알고리즘으로 압축하려면? ― lzma 052 여러 파일을 zip으로 합치려면? ― zipfile 053 여러 파일을 tar로 합치려면? ― tarfile 09장 다양한 형식의 파일 다루기 054 CSV 파일을 읽고 쓰려면? ― csv 055 설정 파일에서 정보를 읽으려면? ― configparser 10장 암호문 다루기 056 비밀번호를 암호화하여 저장하려면? ― hashlib 057 메시지 변조를 확인하려면? ― hmac 058 안전한 난수를 생성하려면? ― secrets 11장 운영체제 다루기 059 문자열을 파일처럼 다루려면? ― io.StringIO 060 명령행 옵션을 지정하여 실행하려면? ― argparse 061 디버깅용 로그를 남기려면? ― logging 062 입력한 비밀번호를 감추려면? ― getpass 063 터미널 프로그램을 만들려면? ― curses 064 시스템 정보를 알아보려면? ― platform 065 C로 만든 라이브러리를 사용하려면? ― ctypes 12장 동시에 실행하기 066 스레드를 이용하여 병렬로 처리하려면? ― threading 067 멀티 프로세스를 이용하여 병렬로 처리하려면? ― multiprocessing 068 병렬로 작업을 처리하려면? ― concurrent.futures 069 시스템 명령어를 실행하려면? ― subprocess 070 원하는 작업을 원하는 시간에 실행하려면? ― sched 13장 네트워크와 프로세스 간 통신 다루기 071 비동기 방식으로 프로그래밍하려면? ― asyncio 072 서버와 통신하는 게임을 만들려면? ― socket 073 SSL로 서버와 통신하려면? ― ssl 074 여러 명이 동시에 접속하려면? ― select 075 멀티플레이 게임 서버를 업그레이드하려면? ― selectors 076 사용자가 보낸 신호를 처리하려면? ― signal 14장 인터넷으로 데이터 주고받기 077 JSON 데이터를 다루려면? ― json 078 바이너리 데이터를 문자열로 바꾸려면? ― base64 079 문자열을 16진수로 변환하려면? ― binascii 080 아스키 외의 문자만 인코딩하려면? ― quopri 081 바이너리 파일을 텍스트 파일로 바꾸려면? ― uu 15장 마크업 언어 다루기 082 XSS 공격을 막으려면? ― html 083 웹 페이지에서 원하는 텍스트만 뽑으려면? ― html.parser 084 XML 문서를 만들려면? ― xml.etree.ElementTree 085 XML에서 엘리먼트와 콘텐츠를 읽으려면? ― xml.etree.ElementTree 16장 인터넷 프로토콜 다루기 086 웹 브라우저를 실행하려면? ― webbrowser 087 서버에서 실행하는 프로그램을 만들려면? ― cgi 088 CGI 프로그램의 오류를 바로 확인하려면? ― cgitb 089 웹 서버 응용 프로그램을 만들려면? ― wsgiref 090 웹 페이지를 저장하려면? ― urllib 091 웹 페이지를 저장하는 또 다른 방법은? ― http.client 092 파일 서버를 사용하려면? ― ftplib 093 수신한 이메일을 POP3로 확인하려면? ― poplib 094 수신한 이메일을 IMAP4로 확인하려면? ― imaplib 095 최신 뉴스를 확인하려면? ― nntplib 096 이메일에 파일을 첨부하려면? ― smtplib 097 텔넷에 접속하여 작업하려면? ― telnetlib 098 고유한 식별자를 만들려면? ― uuid 099 서버와 통신하는 게임을 만들려면? ― socketserver 100 테스트용 HTTP 서버를 만들려면? ― http.server 101 XMLRPC 서버와 클라이언트를 만들려면? ― xmlrpc 17장 기타 서비스 다루기 102 이미지인지 확인하려면? ― imghdr 103 터틀 그래픽으로 그림을 그리려면? ― turtle 104 익숙한 명령행 프로그램을 만들려면? ― cmd 105 문장을 분석하려면? ― shlex 106 그래픽 사용자 인터페이스를 만들려면? ― tkinter 107 작성한 코드를 테스트하려면? ― unittest 108 독스트링을 추가하고 테스트하려면? ― doctest 109 함수의 실행 시간을 비교하려면? ― timeit 110 만든 코드를 디버깅하려면? ― pdb 111 매개변수를 전달하여 실행하려면? ― sys.argv 112 객체를 출력하거나 비교하려면? ― dataclasses 113 반드시 메서드를 구현하도록 하려면? ― abc 114 프로그램 종료 시 특정 작업을 실행하려면? ― atexit 115 오류 위치와 그 원인을 알려면? ― traceback 116 데이터의 타입을 확인하려면? ― typing 18장 외부 라이브러리 다루기 117 패키지를 설치하고 관리하려면? ― pip 118 HTTP 메서드를 테스트하려면? ― requests 119 문자열 중 바뀐 부분을 확인하려면? ― diff_match_patch 120 테스트용 데이터를 생성하려면? ― faker 121 파이썬으로 방정식을 풀려면? ― sympy 122 실행 파일(exe)로 배포하려면? ― pyinstaller A 부록 - 파이썬 라이브러리를 이해하기 위한 다섯 가지 배경 지식 01 파이썬과 유니코드 02 클로저와 데코레이터 03 이터레이터와 제너레이터 04 파이썬 타입 어노테이션 05 str() 함수와 repr() 함수 B 마치며

Toplist

최신 우편물

태그