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


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

  • 2016년 01월 13일에 작성됨

조회수 2294


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합니다.
  • 2016년 01월 13일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close