目次
1. Python에서의 명령 실행이란?
Python은 다양한 작업을 자동화하는 데 사용되는 프로그래밍 언어로, 특히 명령줄 작업을 코드에서 직접 실행할 수 있다는 점이 큰 매력입니다. Python에서는 운영체제의 기능을 호출하여 파일 작업과 시스템 관리를 자동화할 수 있습니다. 이번 글에서는 Python을 사용해 명령을 실행하는 기본적인 방법부터 고급 활용까지 소개합니다.2. Python에서 명령을 실행하는 기본적인 방법
Python에서 명령을 실행하는 가장 기본적인 방법은os.system()
이나 subprocess
모듈을 사용하는 것입니다. 각 방법에는 장단점이 있으므로 상황에 따라 구분해 사용하는 것이 중요합니다。2.1 os.system()
로 명령 실행
os.system()
은 Python 프로그램에서 시스템 명령을 실행하기 위한 간단한 방법입니다. 다음과 같이 사용합니다。import os
os.system('ls')
이 메서드는 사용이 간단하지만 명령 결과를 가져올 수 없고 보안 측면에서도 우려가 있어 일반적으로는 권장되지 않습니다. 최근에는 더 제어하기 쉬운 subprocess
모듈을 사용하는 경우가 많습니다。2.2 subprocess.run()
로 기본적인 명령 실행
subprocess.run()
은 Python에서 명령을 실행할 때 권장되는 방법입니다. 결과를 얻거나 오류를 처리할 수 있어 더 안전하고 유연하게 명령을 실행할 수 있습니다。import subprocess
subprocess.run(['ls', '-l'])
이 코드는 ls -l
명령을 실행하고 결과를 표준 출력에 표시합니다. subprocess.run()
은 동기적으로 동작하여 명령이 완료될 때까지 다음 처리로 진행하지 않는 것이 특징입니다. 특히 파일 작업이나 시스템 관리 등에 유용합니다。
3. 고급 명령 실행: 비동기 처리와 파이프 처리
더 고급의 명령 실행이 필요할 경우、subprocess
모듈을 사용하면 비동기 실행과 파이프 처리가 가능합니다. 이로써 보다 복잡한 처리를 효율적으로 자동화할 수 있습니다.3.1 subprocess.Popen()
에서의 비동기 명령 실행
비동기 처리는 명령이 완료되기를 기다리지 않고 다음 처리로 진행할 수 있어, 여러 작업을 동시에 실행하고 싶을 때 유용합니다. 예를 들어, 다음 코드는 비동기로 명령을 실행합니다.import subprocess
proc = subprocess.Popen(['sleep', '5'])
print("명령어가 실행 중입니다")
이 코드는sleep 5
명령을 비동기로 실행하고, “명령어가 실행 중입니다”라고 표시합니다. 비동기 처리는 시간이 오래 걸리는 명령이나 병행해서 수행하고 싶은 작업이 있을 때 효과적입니다。3.2 파이프 처리로 여러 명령을 연계
여러 명령을 조합해 실행하고 싶다면 파이프 처리가 편리합니다. 예를 들어, 파일의 내용을 읽어 그것을 다른 파일에 써 내보내려면 다음과 같이 작성할 수 있습니다.import subprocess
with open('input.txt') as input_file, open('output.txt', 'w') as output_file:
subprocess.run(['cat'], stdin=input_file, stdout=output_file)
이 코드에서는 input.txt
의 내용을 cat
명령으로 읽어들여 그것을 output.txt
에 써냅니다. subprocess.run()
의 강력한 기능 중 하나는 표준 입력과 표준 출력을 파이프로 연결할 수 있다는 점입니다.4. 오류 처리와 출력 얻기
명령 실행에서 중요한 요소는 오류 처리와 명령 결과를 얻는 것입니다。subprocess
는 이를 유연하게 처리할 수 있도록 설계되었습니다。4.1 표준 출력과 오류 출력 가져오기
subprocess.run()
에서는 명령의 표준 출력과 오류 출력을 캡처할 수 있습니다. 아래 예제에서는 명령 결과를 변수에 저장하고 그 내용을 출력합니다。import subprocess
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
여기서、capture_output=True
를 지정하면 명령의 표준 출력을 얻을 수 있습니다. 오류 출력은result.stderr
에서 얻을 수 있습니다。4.2 예외 처리를 통한 오류 처리
명령 실행 중 오류가 발생하면 Python은 예외를 발생시킵니다. 이를try-except
블록으로 처리하면 오류 발생 시 적절히 대응할 수 있습니다。import subprocess
try:
subprocess.run(['invalid_command'], check=True)
except subprocess.CalledProcessError as e:
print(f"오류가 발생했습니다: {e}")
이 코드에서는、check=True
를 지정함으로써 명령이 실패할 경우 예외를 발생시키고, 오류 메시지를 포착합니다. 이를 통해 오류 시 로그를 기록하거나 다른 처리를 수행할 수 있습니다。5. Windows, Mac, Linux의 차이
Python에서의 명령 실행은 사용하는 OS에 따라 동작이 달라질 수 있습니다. 특히, Windows와 Unix 계열 OS(예: Linux나 macOS)에서는 명령의 형식과 동작에 차이가 있으므로 주의가 필요합니다.5.1 Windows에서의 명령 실행
Windows 환경에서는 명령 프롬프트나 PowerShell을 사용해 명령을 실행합니다. 예를 들어, 디렉터리 목록을 표시하려면 아래와 같이 작성합니다.import subprocess
subprocess.run(['dir'], shell=True)
Windows에서는shell=True
를 지정해야 하며, 이를 통해 셸의 내부 명령을 실행할 수 있습니다.5.2 Unix 계열 OS에서의 명령 실행
Linux나 macOS에서는 셸 명령을 그대로 실행할 수 있습니다. 예를 들어, 디렉터리 목록을 가져오려면 아래와 같이 작성합니다.import subprocess
subprocess.run(['ls', '-l'])
Unix 계열 OS에서는 명령의 형식이 Windows와 달라 더 간단하게 작성할 수 있는 경우가 많습니다.6. 정리
Python을 사용해 명령을 실행하면 파일 관리와 시스템 작업을 자동화하고 효율화할 수 있습니다.subprocess
모듈을 사용하면 기본적인 명령 실행부터 비동기 처리와 파이프 처리까지 다양한 시나리오에 대응할 수 있습니다. 또한 오류 처리와 OS별 차이에 유의하면서 Python을 활용해 유연한 명령 실행을 구현해 봅시다. 이처럼 Python에서의 명령 실행 방법을 제대로 이해하고 일상적인 작업을 효율화하면 프로그래밍 실력을 한층 더 높일 수 있습니다. 꼭 실습해 보세요。