이 글에서는 하위 프로세스를 사용하여 Python에서 Linux 명령을 일괄적으로 실행하는 방법을 자세히 설명합니다. 관심 있는 친구는 참고할 수 있습니다.
셸 명령을 실행할 수 있는 관련 모듈 및 기능은 다음과 같습니다.
os.system
os.spawn
os.popen --Abandoned
popen --Abandoned
명령 --Abandoned, 3.x에서 제거
위 모듈의 기능과 쉘 명령 실행과 관련된 기능은 모두 subprocess 모듈에 구현되어 더욱 풍부한 기능을 제공합니다.
subprocess
call
명령을 실행하고 상태 코드를 반환합니다.
>>> import subprocess >>> ret = subprocess.call(["ls", "-l"], shell=False) total 4684 -rw-r--r-- 1 root root 454 May 5 12:20 aa.py -rw-r--r-- 1 root root 0 May 8 16:51 aa.txt -rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe -rw-r--r-- 1 root root 422 May 5 12:20 ip_info.txt -rw-r--r-- 1 root root 718 Apr 19 10:52 my.cnf >>> ret = subprocess.call("ls -l", shell=True) total 4684 -rw-r--r-- 1 root root 454 May 5 12:20 aa.py -rw-r--r-- 1 root root 0 May 8 16:51 aa.txt -rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe -rw-r--r-- 1 root root 422 May 5 12:20 ip_info.txt -rw-r--r-- 1 root root 718 Apr 19 10:52 my.cnf >>> print(ret) 0
check_call
명령을 실행하고 0을 반환합니다. 실행 상태 코드는 0입니다. 그렇지 않으면 예외 발생
>>> subprocess.check_call(["ls", "-l"]) total 4684 -rw-r--r-- 1 root root 454 May 5 12:20 aa.py -rw-r--r-- 1 root root 0 May 8 16:51 aa.txt -rw-r--r-- 1 root root 4783286 Apr 11 16:39 DockerToolbox.exe -rw-r--r-- 1 root root 422 May 5 12:20 ip_info.txt -rw-r--r-- 1 root root 718 Apr 19 10:52 my.cnf 0 >>> subprocess.check_call("exit 1", shell=True) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 581, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1
check_output
명령을 실행합니다. 상태 코드가 0이면 실행 결과가 반환되고, 그렇지 않으면 예외가 발생합니다.
>>> subprocess.check_output(["echo", "Hello World!"]) b'Hello World!\n' >>> subprocess.check_output("exit 1", shell=True) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 626, in check_output **kwargs).stdout File "/usr/local/python3.5/lib/python3.5/subprocess.py", line 708, in run output=stdout, stderr=stderr) subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1
subprocess.Popen( ...)
복잡한 시스템 명령을 실행하는 데 사용됩니다.
매개변수:
args: 문자열 또는 시퀀스 유형일 수 있는 쉘 명령(예: 목록, 튜플)
bufsize: 버퍼 지정 . 0 버퍼링 없음, 1 라인 버퍼링, 기타 버퍼 크기, 네거티브 시스템 버퍼링
stdin, stdout, stderr: 각각 프로그램의 표준 입력, 출력 및 오류 핸들을 나타냅니다.
preexec_fn: Unix 플랫폼에서만 유효합니다. 사용 호출 가능 객체를 지정하기 위해 하위 프로세스가 실행되기 전에 호출됩니다.
close_sfs: Windows 플랫폼에서 close_fds가 True로 설정된 경우 새로 생성된 하위 프로세스는 상위 프로세스의 입력, 출력, 오류 파이프를 상속하지 않습니다. .
따라서 close_fds를 True로 설정하고 하위 프로세스의 표준 입력, 출력 및 오류(stdin, stdout, stderr)를 동시에 리디렉션할 수 없습니다.
shell: 위와 동일
cwd: 자식 프로세스의 현재 디렉터리를 설정하는 데 사용됩니다.
env: 자식 프로세스의 환경 변수를 지정하는 데 사용됩니다. env = None이면 하위 프로세스의 환경 변수는 상위 프로세스에서 상속됩니다.
universal_newlines: 시스템마다 줄 바꿈이 다릅니다. True -> n
startupinfo 사용에 동의하고 createionflags는 Windows에서만 유효합니다.
는 하위 프로세스를 설정하기 위해 기본 CreateProcess() 함수에 전달됩니다.
일반 명령 실행
>>> import subprocess >>> ret1 = subprocess.Popen(["mkdir","t1"]) >>> ret2 = subprocess.Popen("mkdir t2", shell=True) >>> print(ret1) <subprocess.Popen object at 0x7f4d7609dd30> >>> print(ret2) <subprocess.Popen object at 0x7f4d7609dc18>
터미널에서 입력하는 명령은 두 가지 유형으로 나뉩니다.
Enter to 다음과 같은 출력을 얻습니다. ifconfig
특정 환경에 들어가서 이에 의존한 다음 다음과 같이 입력합니다. python
>>> import subprocess >>> obj = subprocess.Popen("mkdir t3", shell=True, cwd='/tmp/',) >>> import subprocess >>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) >>> obj.stdin.write("print(1)\n") 9 >>> obj.stdin.write("print(2)") 8 >>> obj.stdin.close() >>> cmd_out = obj.stdout.read() >>> obj.stdout.close() >>> cmd_error = obj.stderr.read() >>> obj.stderr.close() >>> print(cmd_out) 1 2 >>> print(cmd_error)
>>> import subprocess >>> >>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) >>> obj.stdin.write("print(1)\n") 9 >>> obj.stdin.write("print(2)") 8 >>> >>> out_error_list = obj.communicate() >>> print(out_error_list) ('1\n2\n', '')
>>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) >>> out_error_list = obj.communicate('print("hello")') >>> print(out_error_list) ('hello\n', '')
관련 권장 사항 :
파이썬을 사용하여 쉘 스크립트 실행 및 동적으로 매개변수 전송 그리고 하위 프로세스의 기본 사용
파이썬 표준 라이브러리 하위 프로세스 하위 프로세스 패키지에 대한 자세한 소개
위 내용은 하위 프로세스는 Python에서 일괄적으로 Linux 명령을 실행합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!