Python 명령 실행 완벽 가이드|기본부터 고급 활용까지 총정리

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에서의 명령 실행 방법을 제대로 이해하고 일상적인 작업을 효율화하면 프로그래밍 실력을 한층 더 높일 수 있습니다. 꼭 실습해 보세요。
侍エンジニア塾