Python subprocess 모듈 기능 과 일반적인 용법 인 스 턴 스 상세 설명
7910 단어 Python서브 프로 세 스 모듈
프로필
subprocess 는 최초 로 2.4 버 전에 도입 되 었 다.하위 프로 세 스 를 만 들 고 파 이 프 를 통 해 입력/출력/오 류 를 연결 하 며 반환 값 을 얻 을 수 있 습 니 다.
subprocess 는 여러 개의 오래된 모듈 과 함 수 를 교체 하 는 데 사 용 됩 니 다.
2.기 존 모듈 의 사용
1.os.system()
운영 체제 명령 을 실행 하고 결 과 를 화면 에 출력 하 며 명령 실행 상태 만 되 돌려 줍 니 다(0:성공,0:실패 가 아 닙 니 다)
import os
>>> a = os.system("df -Th")
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 ext4 1.8T 436G 1.3T 26% /
tmpfs tmpfs 16G 0 16G 0% /dev/shm
/dev/sda1 ext4 190M 118M 63M 66% /boot
>>> a
0 # 0
#
>>> res = os.system("list")
sh: list: command not found
>>> res
32512 # 0
2. os.popen()운영 체제 명령 을 실행 하면 결 과 를 메모리 에 저장 하고
read()
방법 으로 읽 을 수 있 습 니 다.
import os
>>> res = os.popen("ls -l")
#
>>> print res
<open file 'ls -l', mode 'r' at 0x7f02d249c390>
# read()
>>> print res.read()
total 267508
-rw-r--r-- 1 root root 260968 Jan 27 2016 AliIM.exe
-rw-------. 1 root root 1047 May 23 2016 anaconda-ks.cfg
-rw-r--r-- 1 root root 9130958 Nov 18 2015 apache-tomcat-8.0.28.tar.gz
-rw-r--r-- 1 root root 0 Oct 31 2016 badblocks.log
drwxr-xr-x 5 root root 4096 Jul 27 2016 certs-build
drwxr-xr-x 2 root root 4096 Jul 5 16:54 Desktop
-rw-r--r-- 1 root root 2462 Apr 20 11:50 Face_24px.ico
3.subprocess 모듈1、subprocess.run()
>>> import subprocess
# python
>>> subprocess.run(["df","-h"])
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-LogVol00
289G 70G 204G 26% /
tmpfs 64G 0 64G 0% /dev/shm
/dev/sda1 283M 27M 241M 11% /boot
CompletedProcess(args=['df', '-h'], returncode=0)
# Linux shell , : ,shell=True
>>> subprocess.run("df -h|grep /dev/sda1",shell=True)
/dev/sda1 283M 27M 241M 11% /boot
CompletedProcess(args='df -h|grep /dev/sda1', returncode=0)
2、subprocess.call()명령 을 실행 하고 명령 의 결과 와 실행 상 태 를 되 돌려 줍 니 다.0 또는 0 이 아 닙 니 다.
>>> res = subprocess.call(["ls","-l"])
28
-rw-r--r-- 1 root root 0 6 16 10:28 1
drwxr-xr-x 2 root root 4096 6 22 17:48 _1748
-rw-------. 1 root root 1264 4 28 20:51 anaconda-ks.cfg
drwxr-xr-x 2 root root 4096 5 25 14:45 monitor
-rw-r--r-- 1 root root 13160 5 9 13:36 npm-debug.log
#
>>> res
0
3、subprocess.check_call()명령 을 실행 하고 결과 와 상 태 를 되 돌려 줍 니 다.정상 은 0 이 고 실행 오 류 는 이상 을 던 집 니 다.
>>> subprocess.check_call(["ls","-l"])
28
-rw-r--r-- 1 root root 0 6 16 10:28 1
drwxr-xr-x 2 root root 4096 6 22 17:48 _1748
-rw-------. 1 root root 1264 4 28 20:51 anaconda-ks.cfg
drwxr-xr-x 2 root root 4096 5 25 14:45 monitor
-rw-r--r-- 1 root root 13160 5 9 13:36 npm-debug.log
0
>>> subprocess.check_call(["lm","-l"])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/subprocess.py", line 537, in check_call
retcode = call(*popenargs, **kwargs)
File "/usr/lib64/python2.7/subprocess.py", line 524, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib64/python2.7/subprocess.py", line 1327, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
4、subprocess.getstatusoutput()문자열 형식의 명령 을 받 고 원 그룹 형식의 결 과 를 되 돌려 줍 니 다.첫 번 째 요 소 는 명령 실행 상태 이 고 두 번 째 요 소 는 실행 결과 입 니 다.
#
>>> subprocess.getstatusoutput('pwd')
(0, '/root')
#
>>> subprocess.getstatusoutput('pd')
(127, '/bin/sh: pd: command not found')
5、subprocess.getoutput()문자열 형식의 명령 을 받 아 실행 결 과 를 되 돌려 줍 니 다.
>>> subprocess.getoutput('pwd')
'/root'
6、subprocess.check_output()인쇄 대신 명령 을 실행 하고 실행 결 과 를 되 돌려 줍 니 다.
>>> res = subprocess.check_output("pwd")
>>> res
b'/root
' #
4.subprocess.Popen()사실 상기 subprocess 에서 사용 하 는 방법 은 모두 subprocess.popen 에 대한 패키지 입 니 다.다음은 이 popen 방법 을 살 펴 보 겠 습 니 다.
1、stdout
표준 출력
>>> res = subprocess.Popen("ls /tmp/yum.log", shell=True, stdout=subprocess.PIPE) #
>>> res.stdout.read() #
b'/tmp/yum.log
'
res.stdout.close() #
2、stderr표준 오류
>>> import subprocess
>>> res = subprocess.Popen("lm -l",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#
>>> res.stdout.read()
b''
#
>>> res.stderr.read()
b'/bin/sh: lm: command not found
'
메모:위 에서 언급 한 표준 출력 은 왜 모두 subprocess.PIPE 와 같 아야 합 니까?이것 은 무엇 입 니까?원래 이것 은 파이프 입 니 다.이것 은 그림 을 그 려 서 설명 해 야 합 니 다.4、poll()
명령 이 실행 되 었 는 지 확인 하고 실행 이 끝 난 후 실행 결 과 를 되 돌려 줍 니 다.실행 이 끝나 지 않 았 습 니 다.None 로 돌아 갑 니 다.
>>> res = subprocess.Popen("sleep 10;echo 'hello'",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> print(res.poll())
None
>>> print(res.poll())
None
>>> print(res.poll())
0
5、wait()명령 이 실 행 될 때 까지 기다 리 고 결과 상 태 를 되 돌려 줍 니 다.
>>> obj = subprocess.Popen("sleep 10;echo 'hello'",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> obj.wait()
#
0
6、terminate()프로 세 스 종료
import subprocess
>>> res = subprocess.Popen("sleep 20;echo 'hello'",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> res.terminate() #
>>> res.stdout.read()
b''
7、pid현재 실행 중인 하위 셸 프로그램의 프로 세 스 번 호 를 가 져 옵 니 다.
import subprocess
>>> res = subprocess.Popen("sleep 5;echo 'hello'",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> res.pid # linux shell
2778
파 이 썬 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.