외부 명령어를 파이썬으로 실행하기

조회수 31522회

unix shell이나 window command 프롬프트에서 쓰는 외부 명령어를 실행하려면 어떻게 해야 하나요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    1. os.system("some_command with args")

    • system shell에 명령어와 인자를 전달해 줍니다.
    • 명령어 여러 개를 동시에 실행하고, 파이프로 input/output 리다이렉션(입출력 재 지정이라고도 합니다)하는 경우 좋습니다.
    • 외부 명령어가 아닌 shell command를 실행할 수 있습니다.
    • 다만, 스페이스 같은 escaping 문자를 쓸 때 주의해야 한다는 단점이 있습니다.

    os.system("some_command < input_file | another_command > output_file")

    2. stream = os.popen("some_command with args")

    • 파일이랑 비슷한 object를 써서 프로세스의 표준 입/출력에 접근할 수 있습니다.
    • 그 외에는 os.system과 같은 기능을 합니다.
    • 문자열만 전달할 경우, shell에 명령어가 전달됩니다.
    • list를 전달할 경우, escaping을 신경 쓸 필요가 없습니다

    3. subprocess 모듈의 Popen class

    • 이 클래스는 os.popen을 대신하려고 만든 기능입니다.
    • 하지만 이해하기 어렵고 너무 많은걸 담고 있어서 잘 쓰이진 않습니다.
    • 다르게 보면 popen 함수 여러 개 호출 하는 것보단 class하나에 option만 설정하는 게 나을 수도 있습니다.

    os.popen("echo Hello World").read() 로 쓰면 될걸 subprocess.Popen("echo Hello World", shell=True, stdout=subprocess.PIPE).stdout.read()같이 써야하지요.

    4. subprocess 모듈의 call

    • Popen클래스와 비슷합니다. 인자도 똑같습니다.
    • 다른 점은 명령어가 다 처리되고 난 후 return합니다. return_code = subprocess.call("echo Hello World", shell=True)

    5. subprocess.run() - 3.5이상

    • 전과 비슷하지만 좀 더 활용성이 높습니다.
    • 명령어 처리가 끝난 후 CompletedProcess를 return합니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)