() 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
모듈을 이용해 호출하고 실행할 수 있습니다. 이 모듈은 다양한 함수를 통해 유닉스 명령을 이용할 때 많은 유연성을 제공합니다. 이 모듈과 이 모듈에서 제공하는 다양한 함수에 관해서는 파이썬 문서에서 더 자세히 배울 수 있습니다.