보통 반복 작업과 같은 스크립트를 짤 때 파이썬을 사용 하다 보면, Bash 명령어를 이용하여 시스템 정보를 가져와야 하는 경우가 있다.
이럴 경우에 파이썬에서는 정보를 가져올 수 있는 코드를 마련해놓았다.
보통, 두 가지 방법으로 Bash 정보를 가져온다.
1. os.system 명령어 사용 방법
먼저, os 모듈의 system 함수를 이용하는 방법이다.
간단한 예로 설명하겠다.
1 2 3 4 5 6 | #!/usr/bin/env python import os print os.system("ls -al") print os.system("ls -al | grep System* > out.txt") | cs |
먼저, os.system 함수를 사용하기 위해서 os 모듈을 import 한다.
이후, os.system 함수의 인자에 Bash 명령어를 입력하면 된다.
굉장히 간단한 방법이라 할수 있다. 다만, 결과값을 특정 변수에 저장할 수 없다는 단점이 있어서, 위의 예처럼 보여줄 때나 직접 output 파일에 결과값을 넣어주는 방법으로만 사용 가능하다.
결과값을 특정 변수에 넣어주고 싶다면, 두 번째 방법인 subprocess 방법을 이용해보자.
2. subprocess 명령어 사용 방법
두 번째 방법은 subprocess 모듈을 이용하는 방법이다.
1번에서 설명한 것처럼, 결과값을 특정 변수에 넣을 때 사용하면 유용할 것이다.
subprocess 사용 방법은 다음과 같다.
먼저, subprocess의 call 함수를 이용하는 방법인데..
1 2 3 4 5 6 | #!/usr/bin/env python import subprocess subprocess.call(["ls", "-al"]) subprocess.call("ls -al", shell=True) | cs |
call 함수를 이용해도, 1번과 같은 효과를 기대할 수 있다.
다만, call은 두 가지 방법으로 사용할 수 있는 데..
먼저, 5번과 6번 라인의 결과는 같다.
5번 라인을 보면, 인자를 명령어와 sub명령어로 나누어서 입력하는 것을 볼 수 있다.
6번 라인을 보면, 첫 번째 인자에 명령어를 모두 적고, 두 번째에 shell=True를 적는 것을 볼 수 있다.
사용할 때는 6번이 더 쉬운 방법이라 할 수 있는 데, shell=True 코드가 안전에 취약한 코드라고 한다. 이 점은 유의하길 바란다.
해당 코드가 취약한 이유는 신뢰할 수 없는 소스로부터 비초기화된 입력을 포함하는 쉘 명령을 실행하게 되는 것이라 그렇다고..
여튼, 위의 방법도 어찌되었든 결과값을 저장할 수 없는 데, 아래에 소개할 방법은 결과값을 저장할 수 있다.
subprocess 모듈의 check_output 함수를 사용하는 방법이다.
1 2 3 4 5 6 | #!/usr/bin/env python import subprocess res = subprocess.check_output('ls -al', shell=True) print res | cs |
5번 라인을 보면, "ls -al"의 결과를 res 변수에 넣는 것을 볼 수 있다.
res 변수를 출력해보면, 원하는 결과값을 확인할 수 있을 것이다.
참고 : https://docs.python.org/2/library/subprocess.html
서로 이웃 추가는 항상 환영입니다. :)
'프로그래밍 > Python' 카테고리의 다른 글
[Python] Read/Write Excel sheet (Python으로 엑셀 파일 읽기/쓰기) 정리 #xlwt/xlrd (0) | 2019.03.19 |
---|---|
[Python] 파이썬 문자열 표현 방법 (raw/multi line) (0) | 2018.08.19 |
[파이썬/ Python] 파이썬 주석 한글 입력 방법 (0) | 2018.06.03 |
[파이썬/Python] 리스트의 원소를 이용하여 리스트 정렬하기 (1 or 다차원 배열) (4) | 2018.06.03 |
[파이썬/Python] 리눅스에서 파이썬 실행파일 만들기 (0) | 2018.06.03 |
댓글