[Python: os.system, subprocess] 프로그램 실행 및 시스템 명령어 실행하는 방법

소개

다재다능한 언어인 파이썬은 시스템 명령을 실행하고 외부 프로그램을 실행하는 여러 가지 방법을 제공한다. 이 포스트에서는 os.system, os.popensubprocess 모듈의 사용에 중점을 두어 시스템 레벨 상호작용을 정밀하게 제어하는 방법을 설명한다.

os.system 사용하기

os.system 명령을 사용하여 셸 명령을 직접 실행할 수 있다.

python
import os

exit_code = os.system('echo Hello, World!')
print("Exit code:", exit_code)

출력

Hello, World!
Exit code: 0

위 예제에서는 os.system을 사용하여 echo 명령을 호출하고 있다. 종료 코드는 작업의 성공 여부에 대한 정보를 제공한다.

os.popen 사용하기

os.popen 함수를 사용하면 서브셸에서 명령을 실행하고 파일 인터페이스를 통해 읽기 또는 쓰기를 할 수 있다.

python
import os

file = os.popen('echo Hello, World!', 'r')
output = file.read()
print("Output:", output)
file.close()

출력

Output: Hello, World!

이 코드 스니펫은 os.popen을 사용하여 명령의 출력을 변수로 읽어들이는 방법을 보여준다.

subprocess.Popen 사용하기

subprocess 모듈은 명령 실행 프로세스를 더욱 더 세밀하게 제어할 수 있다. subprocess.Popen을 사용하면 명령을 실행하고 출력을 검색하며 프로세스를 더 유연하게 관리할 수 있다.

python
import subprocess

process = subprocess.Popen(['echo', 'Hello, World!'], stdout=subprocess.PIPE)
output, error = process.communicate()
print("Output:", output.decode())

출력

Output: Hello, World!

여기서 subprocess.Popen을 사용하여 echo 명령을 실행하고 출력을 캡처하고 있다.

subprocess.call과 subprocess.run

subprocess.callsubprocess.run 모두 셸 명령을 실행하는 편리한 방법이다. 사용 예를 통해 그 사용법을 확인해 보자.

python
# subprocess.call 사용
exit_code = subprocess.call(['echo', 'Using call'])
print("Exit code using call:", exit_code)

# subprocess.run 사용
result = subprocess.run(['echo', 'Using run'], stdout=subprocess.PIPE)
print("Output using run:", result.stdout.decode())

출력

Using call
Exit code using call: 0
Using run
Output using run: Using run

이러한 메서드는 명령을 보다 쉽게 실행할 수 있게 해주며, subprocess.run은 Python 3.5 이상에서 더 많은 기능을 제공한다.


시스템 명령을 실행하고 외부 프로그램을 실행하는 것은 여러 자동화 및 통합 작업의 핵심 부분이다. 파이썬의 ossubprocess와 같은 모듈의 유연성은 이러한 작업을 더욱 접근 가능하고 유지 관리 가능하게 만들어준다. os.system, os.popen 또는 더 강력한 subprocess 메서드를 선택하는 것은 응용 프로그램의 특정 요구에 따라 다르다. 이러한 예제를 실험해 보면 기능을 이해하고 프로젝트에 적용하는 데 도움이 될 것이다.


FAQs

  1. os.systemsubprocess 간의 주요한 차이점은 무엇인가? os.system은 더 간단하지만 덜한 제어를 제공하며, subprocess는 더 많은 기능과 프로세스 제어를 제공한다.
  2. 이 방법들을 사용하여 오류 메시지를 포착할 수 있을까요? 그렇다, subprocess.Popensubprocess.run을 사용하면 표준 출력과 표준 오류 스트림을 모두 포착할 수 있다.
  3. 이 방법으로 명령을 실행하는 것은 안전한가요? 사용자 입력을 포함하는 경우 코드 주입 및 기타 보안 위험을 피하기 위해 주의가 필요한다.
  4. 여러 명령을 순차적으로 실행해야 하는 경우는 어떻게 하나요? 루프 내에서 이러한 방법을 사용하거나 한 번의 호출 내에서 셸 구문을 사용하여 명령을 연결할 수 있다.
  5. 이 방법들은 플랫폼에 독립적인가? 일반적으로 플랫폼에 독립적이지만, 특정한 명령어가 모든 운영 체제에서 동작하지 않을 수 있다. 대상 플랫폼에서 테스트하는 것이 가장 좋다.
© Copyright 2023 CLONE CODING