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

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

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을 사용하여 외부 명령을 실행하는 다양한 방법을 보여줍니다. 그만큼 subprocess.run 명령은 다목적이므로 Python 스크립트에서 직접 셸 명령을 실행할 수 있습니다. 예를 들어, subprocess.run(['echo', 'Hello, World!']) 콘솔에 메시지를 인쇄하는 동안 subprocess.run(['ls', '-l'], capture_output=True, text=True) 의 출력을 캡처합니다. 명령을 실행하여 자세한 디렉터리 목록을 표시합니다. 사용 shell=True ~와 함께 subprocess.run 와일드카드 확장과 같은 셸 기능을 사용할 수 있어 보다 복잡한 명령에 편리합니다.

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

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

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

Python에서 시스템 명령 실행에 관해 자주 묻는 질문

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

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

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

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

Python에서 명령 실행에 대한 최종 생각

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