본문 바로가기
프로그래밍/Python

[파이썬/Python] 파이썬 코드에서 Bash 명령어 실행 방법

by _BlankSpace 2018. 6. 3.

보통 반복 작업과 같은 스크립트를 짤 때 파이썬을 사용 하다 보면, 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


서로 이웃 추가는 항상 환영입니다. :)

댓글