하위 프로세스는 Python에서 일괄적으로 Linux 명령을 실행합니다.

不言
풀어 주다: 2018-04-27 11:55:43
원래의
3355명이 탐색했습니다.

이 글에서는 하위 프로세스를 사용하여 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 &#39;exit 1&#39; returned non-zero exit status 1
로그인 후 복사

check_output

명령을 실행합니다. 상태 코드가 0이면 실행 결과가 반환되고, 그렇지 않으면 예외가 발생합니다.

>>> subprocess.check_output(["echo", "Hello World!"])
b&#39;Hello World!\n&#39;
>>> 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 &#39;exit 1&#39; 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=&#39;/tmp/&#39;,)
>>> 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)
(&#39;1\n2\n&#39;, &#39;&#39;)
로그인 후 복사

>>> obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
>>> out_error_list = obj.communicate(&#39;print("hello")&#39;)
>>> print(out_error_list)
(&#39;hello\n&#39;, &#39;&#39;)
로그인 후 복사

관련 권장 사항 :

파이썬을 사용하여 쉘 스크립트 실행 및 동적으로 매개변수 전송 그리고 하위 프로세스의 기본 사용

하위 프로세스 모듈 소개 및 사용

파이썬 표준 라이브러리 하위 프로세스 하위 프로세스 패키지에 대한 자세한 소개

위 내용은 하위 프로세스는 Python에서 일괄적으로 Linux 명령을 실행합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿