Advertisement
  1. Code
  2. Python

파이썬 프로그램에서 유닉스 명령어 실행하는 법

Scroll to top
Read Time: 2 min

() translation by (you can also view the original English article)

유닉스(Unix)는 켄 톰슨(Ken Thompson)과 데니스 리치(Dennis Ritchie)가 AT&T 벨 연구소에서 1969년 경에 개발한 운영체제입니다. 다양한 작업을 수행하는 데 사용할 수있는 흥미로운 유닉스 명령어가 많습니다. 문제는 파이썬 프로그램에서 직접 그러한 명령어를 실행할 수 있느냐입니다. 이 튜토리얼에서는 바로 이러한 방법을 보여드리고자 합니다.

유닉스 명령어 ls는 디렉터리 내의 모든 파일을 나열합니다. 파이썬 스크립트에 ls를 넣으면 프로그램을 실행했을 때 다음과 같은 결과가 출력됩니다.

1
Traceback (most recent call last):
2
  File "test.py", line 1, in <module>
3
    ls
4
NameError: name 'ls' is not defined

이것은 파이썬 인터프리터가 ls를 변수로 취급하고 이를 정의(즉, 초기화)해야 하고 유닉스 명령으로 취급하지 않았음을 보여줍니다.

os.system()

이 문제의 한 가지 해결책은 파이썬의 os 모듈에서 제공하는 os.system()을 사용하는 것입니다.

문서에 언급돼 있는 바와 같이 os.system()은 다음과 같은 역할을 합니다.

하위 셸에서 명령어(문자열)을 실행한다. 이것은 표준 C 함수인 system()을 호출하는 방식으로 구현돼 있고 system()과 동일한 제약을 갖고 있다.

따라서 파이썬에서 ls 명령어를 다음과 같이 실행할 수 있습니다.

1
import os
2
os.system('ls')

이렇게 하면 .py 프로그램이 위치한 현재 디렉터리의 파일 목록이 반환됩니다.

또 다른 예제를 살펴봅시다. 현재 날짜와 시간을 반환하고 싶다면 다음과 같이 유닉스 명령어인 date를 사용할 수 있습니다.

1
import os
2
os.system('date')

위 스크립트를 실행했을 때 저는 다음과 같은 결과를 얻었습니다.

Tue May 24 17:29:20 CEST 2016

call()

os.system()은 작동하지만 이 방법은 약간 오래된 것으로 간주되고 지원 중단됐으므로 권장되지 않습니다. 더 권장하는 방법은 파이썬의 subprocess 모듈에서 제공하는 call(args) 함수를 사용하는 것입니다. 이 함수에 대해서는 다음과 같이 설명돼 있습니다.

args에 기술된 명령을 실행한다. 명령이 완료될 때까지 대기한 다음 returncode 속성을 반환한다.

이 방법으로 ls 유닉스 명령을 실행하려면 다음과 같이 하면 됩니다.

1
from subprocess import call
2
call('ls')

subprocess 모듈을 사용해 날짜를 반환하는 방법을 살펴봅시다. 하지만 이번에는 예제를 좀 더 재미있게 만들어 보겠습니다.

1
import subprocess 
2
time = subprocess.Popen('date', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
3
output, err = time.communicate()
4
print 'It is', output

위 예제는 다음과 같이 check_output()을 이용해 더 간단하게 실행할 수 있습니다.

1
import subprocess 
2
time = subprocess.check_output('date')
3
print 'It is', time

위 스크립트의 출력 결과는 다음과 같습니다.

It is Tue May 24 19:14:22 CEST 2016

위 예제는 다른 subprocess 함수를 사용할 때의 유연성과 추가 연산을 수행하기 위해 변수에 결과를 전달하는 방법을 보여줍니다.

결론

이 튜토리얼에서 살펴봤듯이 유닉스 명령은 subprocess 모듈을 이용해 호출하고 실행할 수 있습니다. 이 모듈은 다양한 함수를 통해 유닉스 명령을 이용할 때 많은 유연성을 제공합니다. 이 모듈과 이 모듈에서 제공하는 다양한 함수에 관해서는 파이썬 문서에서 더 자세히 배울 수 있습니다.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.