1 답변
-
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합니다.
댓글 입력