단순한 서브프로세스 실행만을 원한다면 call 함수를 사용한다. call 함수 사용시 실행된 서브프로세스가 종료되기 기다렸다가 종료되면 결과값을 화면에 출력해준다. 다음은 call 함수에 사용되는 옵션들이다 .
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
call 예제
>>>subprocess.call(["ls", "-al"])
total 200
drwxr-xr-x 7 kbae kbae 4096 Oct 1 22:13 .
drwxr-xr-x 3 kbae kbae 4096 Oct 1 21:42 ..
drwxr-xr-x 8 kbae kbae 4096 Oct 1 21:09 .git
subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
아래는 check_output 사용 예제
>>>subprocess.check_output (['ls', '-al'] )
b'total 8\\ndrwxr-xr-x. 2 root root 4096 10\\xec\\x9b\\x94 8 17:58 .\\ndrwxr-xr-x. 6 root root 4096 10\\xec\\x9b\\x94 8 17:58 ..\\n'
Popen 은 다양한 옵션들을 통해 call, check_output 등 보다 유연하게 사용할 수 있다.
subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
아래는 Popen 함수 사용 예제
>>> proc = subprocess.Popen(['ls', '-al'], stdout=subprocess.PIPE, stderr=subprocess.PIPE )
>>> out = proc.communicate()
>>> out
(b'total 8\\ndrwxr-xr-x. 2 root root 4096 10\\xec\\x9b\\x94 8 17:58 .\\ndrwxr-xr-x. 6 root root 4096 10\\xec\\x9b\\x94 8 17:58 ..\\n', b'')
Popne과 communicate