Python에서 외부 명령을 실행하는 방법

Python subprocess

Python에서 시스템 명령 실행

Python은 스크립트에서 직접 외부 프로그램과 시스템 명령을 실행할 수 있는 강력한 기능을 제공합니다. 이 기능을 사용하면 운영 체제에서 사용할 수 있는 다양한 도구를 활용하면서 Python의 단순성을 활용할 수 있습니다.

반복적인 작업을 자동화하든 복잡한 작업 흐름을 통합하든 관계없이 Python에서 시스템 명령을 호출하는 방법을 이해하면 생산성을 크게 향상시킬 수 있습니다. 이 가이드에서는 이를 효과적으로 달성하기 위한 다양한 방법을 살펴보겠습니다.

명령 설명
subprocess.run 서브셸에서 명령을 실행합니다. 출력 및 오류를 캡처할 수 있습니다.
subprocess.run([...], capture_output=True) 실행된 명령의 표준 출력 및 표준 오류를 캡처합니다.
subprocess.run([...], shell=True) 쉘을 통해 명령을 실행하여 와일드카드와 같은 쉘 기능을 허용합니다.
subprocess.Popen 새 프로세스에서 명령을 실행하여 실행에 대한 더 많은 제어를 제공합니다.
process.stdout.readline() 프로세스의 표준 출력에서 ​​한 줄의 출력을 읽습니다.
os.system 간단한 명령 실행에 일반적으로 사용되는 서브셸에서 명령을 실행합니다.
subprocess.check_output 명령을 실행하고 해당 출력을 반환합니다. 명령이 실패하면 예외가 발생합니다.
os.environ.copy() 수정이 가능하도록 현재 환경 변수의 복사본을 만듭니다.
env parameter in subprocess.run 새 프로세스에 대한 환경 변수를 지정합니다.

Python의 스크립트 실행 이해

제공된 스크립트는 Python을 사용하여 외부 명령을 실행하는 다양한 방법을 보여줍니다. 그만큼 명령은 다목적이므로 Python 스크립트에서 직접 셸 명령을 실행할 수 있습니다. 예를 들어, 콘솔에 메시지를 인쇄하는 동안 의 출력을 캡처합니다. 명령을 실행하여 자세한 디렉터리 목록을 표시합니다. 사용 ~와 함께 와일드카드 확장과 같은 셸 기능을 사용할 수 있어 보다 복잡한 명령에 편리합니다.

그만큼 명령은 비동기 명령 실행과 프로세스의 입력 및 출력 스트림과의 상호 작용을 허용하여 명령 실행을 보다 효과적으로 제어할 수 있습니다. 예를 들어, 다음 스크립트 예제는 지속적으로 로컬 시스템을 핑하고 각 출력 줄을 읽습니다. 추가적으로, 간단한 명령 실행에 사용되지만 유연성이 부족합니다. subprocess. 환경 변수는 다음을 사용하여 수정하고 하위 프로세스에 전달할 수 있습니다. 그리고 매개변수 , 환경에 따라 동적 명령 실행이 가능합니다.

Python에서 외부 명령 실행

Python의 하위 프로세스 모듈 사용

import subprocess
# Example 1: Running a simple shell command
subprocess.run(['echo', 'Hello, World!'])
# Example 2: Capturing the output of a command
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
# Example 3: Running a command with shell=True
subprocess.run('echo Hello from the shell', shell=True)
# Example 4: Checking the return code
result = subprocess.run(['ls', 'nonexistentfile'], capture_output=True)
if result.returncode != 0:
    print('Command failed')
# Example 5: Using subprocess.Popen for more control
process = subprocess.Popen(['ping', 'localhost'], stdout=subprocess.PIPE)
while True:
    output = process.stdout.readline()
    if output == b'' and process.poll() is not None:
        break
    if output:
        print(output.strip().decode())

Python으로 시스템 작업 자동화

os.system 및 하위 프로세스 모듈 사용

import os
import subprocess
# Example 1: Using os.system to run a command
os.system('echo This is a test')
# Example 2: Running a command and capturing output with subprocess
result = subprocess.run(['date'], capture_output=True, text=True)
print('Current date and time:', result.stdout)
# Example 3: Executing multiple commands
commands = ['echo First command', 'echo Second command']
for cmd in commands:
    os.system(cmd)
# Example 4: Running a command with environment variables
env = os.environ.copy()
env['MY_VAR'] = 'Hello'
subprocess.run('echo $MY_VAR', shell=True, env=env)
# Example 5: Handling command errors
try:
    subprocess.check_output(['false_command'], stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
    print('An error occurred:', e.output.decode())

시스템 명령 실행을 위한 고급 기술

Python에서 시스템 명령을 실행하는 또 다른 측면은 쉘 명령 구문 분석을 처리하는 모듈입니다. 이 모듈은 셸 명령을 목록 형식으로 분할하는 방법을 제공합니다. 기능. 이렇게 하면 공백이 있는 인수가 올바르게 처리됩니다. 또한 다음을 사용할 수 있습니다. 표준 입력, 출력 및 오류 스트림을 상위 프로세스로 전달하여 보다 복잡한 프로세스 간 통신을 허용합니다.

예를 들어, 명령을 연결하고 출력을 순차적으로 처리하려면 다음을 사용하여 한 명령의 출력을 다른 명령으로 파이프하면 됩니다. . 이를 통해 쉘 스크립트에서 수행하는 것과 유사한 강력한 명령 시퀀스를 생성할 수 있습니다. 당신은 또한 사용할 수 있습니다 여러 하위 프로세스 명령을 동시에 실행하여 특히 I/O 바인딩 작업을 처리할 때 스크립트의 효율성을 향상시킵니다.

  1. 쉘 명령을 실행하고 Python에서 출력을 얻으려면 어떻게 해야 합니까?
  2. 사용 ~와 함께 명령의 출력을 캡처합니다.
  3. 차이점은 무엇 입니까? 그리고 ?
  4. 명령이 완료될 때까지 기다리는 더 간단한 인터페이스입니다. 명령 실행을 더 효과적으로 제어할 수 있어 비동기 작업이 가능합니다.
  5. 시스템 명령을 실행할 때 오류를 어떻게 처리합니까?
  6. 사용 그리고 블록 오류를 포착하고 처리합니다.
  7. 환경 변수를 명령에 전달할 수 있나요?
  8. 예, 다음을 사용하세요. 매개변수 또는 환경 변수를 전달합니다.
  9. 여러 명령을 순서대로 실행하려면 어떻게 해야 합니까?
  10. 사용 또는 파이프를 사용하는 루프 또는 체인 명령에서 .
  11. 사용자 입력이 필요한 명령을 어떻게 실행할 수 있나요?
  12. 사용 ~와 함께 다음을 사용하여 프로세스와 통신합니다. .
  13. 의 용도는 무엇입니까? 명령 실행 중?
  14. 공백이 있는 인수가 올바르게 처리되도록 하여 쉘 명령을 올바르게 구문 분석하는 데 도움이 됩니다.
  15. 백그라운드에서 명령을 어떻게 실행하나요?
  16. 사용 프로세스가 완료될 때까지 기다리지 않고 사용하거나 백그라운드 실행을 관리합니다.

시스템 명령 실행을 위한 고급 기술

Python에서 시스템 명령을 실행하는 또 다른 측면은 쉘 명령 구문 분석을 처리하는 모듈입니다. 이 모듈은 셸 명령을 목록 형식으로 분할하는 방법을 제공합니다. 기능. 이렇게 하면 공백이 있는 인수가 올바르게 처리됩니다. 또한 다음을 사용할 수 있습니다. 표준 입력, 출력 및 오류 스트림을 상위 프로세스로 전달하여 보다 복잡한 프로세스 간 통신을 허용합니다.

예를 들어, 명령을 연결하고 출력을 순차적으로 처리하려면 다음을 사용하여 한 명령의 출력을 다른 명령으로 파이프하면 됩니다. . 이를 통해 쉘 스크립트에서 수행하는 것과 유사한 강력한 명령 시퀀스를 생성할 수 있습니다. 당신은 또한 사용할 수 있습니다 여러 하위 프로세스 명령을 동시에 실행하여 특히 I/O 바인딩 작업을 처리할 때 스크립트의 효율성을 향상시킵니다.

Python에서 외부 명령을 실행하는 것은 스크립팅 및 자동화 작업을 크게 향상시킬 수 있는 다재다능하고 강력한 기능입니다. 을 사용하여 모듈을 사용하면 셸 명령을 실행하고 해당 출력을 캡처하며 오류를 효과적으로 처리할 수 있습니다. 그만큼 함수는 기본 명령 실행을 위한 더 간단한 대안을 제공합니다. 추가적으로, 모듈은 복잡한 쉘 명령의 적절한 구문 분석을 보장합니다. 이러한 기술을 이해하면 운영 체제 명령줄 도구의 잠재력을 최대한 활용하면서 Python의 장점을 활용할 수 있습니다.