1. subprocess 모둘
○ 외부 프로그램과 데이터 교환
- 외부 프로그램 실행(Popen() 사용)
- 외부 프로그램과 데이터 교환 : Popen은 외부 프로그램을 단순히 실행시키는 것이 아니라 출력 결과를 받아서, 별도의 처리를 할 수 있음.
2. subprocess의 다른 API들
○ call() : 주어진 명령을 실행시키고 프로세스 종료 코드를 리턴함.(OS에서 관리하는 프로세스 종료 코드로 0이면 정상 종료된 것을 의미, but 다른 코드가 리턴되면 문제가 있다는 것을 의미)
- 실행 결과를 리턴
- 원형 : subprocess.call(agrs, *, stdin = None, stdout = None, stderr = None, shell = False)
○ getoutput() :
- 실행 결과를 반환 = Popen과 PIPE를 이용했던 예제와 같은 역할을 함 <- 결과를 출력하기 위해서는 print() 등이 필요
- 원형 : getoutput(cmd)
○ check_call(): call함수와 기능적으로 동일
- call()과의 차이점은 프로세스 실행 오류 시, call()이 아닌 값을 리턴하는 반면, check_call()함수는 CalledProcessError 예외가 발생(실행 결과 값과 메시지들이 담겨 있음)
- 원형 : check_call(args, *, stdin=None,stderr=None,shell=False)
○ check_output() :
- getoutput() 함수와 같은 기능
- 오류 시, CalledProcessError 예외가 발생
- 원형 : check_output(args, *, stdin=None, stderr=None, shell=False, universalnewlines=False)
○ 긴 수명을 가진 프로세스의 로그 출력 : 파이프의 속성 값을 논블럭으로 설정하면 됨
2. shutil
○ 파일 복사
- shutil.copy(src, dst, *, followsymlinks=True)
- shutil.copy2(src, dst, *, followsymlinks=True)
<- src로 지정된 파일을 dst로 지정된 파일 혹은 디렉토리로 복사.
copy 와 copy2의 기능은 동일하지만, 복사하는 범위가 다름.
copy() 함수는 파일의 내용만 복사하는 반면 copy2()는 파일의 소유자, 파일의 생성, 변경 시간 등 파일의
메타 데이터도 같이 복사
○ 파일 삭제
- 파일 하나 삭제 os.unlink(), 폴더 전체 삭제 shutildml rmtree()를 사용
○ 파일 이동
- shutil의 move()함수는 파일 혹은 디렉토리를 다른 곳으로 이동시키거나 이름을 변경할 수 있음.
○ 기타
- 특정 디렉토리를 zip 혹은 tar로 만들어야 할 경우, makearchive() 함수를 이용.
3. OS 모듈
○ 환경변수
- os.environ
○ 디렉토리 파일 순환
- walk() 함수는 주어진 디렉토리를 시작으로 내부에 있는 모든 디렉토리와 파일들을 찾음.
- walk() 형식 : walk(top <- 조사할 디렉토리 지정, topdown=True <- 반환하는 순서 결정 = True : 상위 디텍토리에서 하위 디렉토리 순
, oneroor=None, followlinks=False)
○ 디렉토리 API
- 디렉토리 생성 삭제 : mkdir, rmdir(디렉토리 내에 파일이나 하위 디렉토리가 없어야 정상 실행 가능, 그렇지 않은 경우 OSError 예외 발생)
예외 예시) OSError: [WinError 145] 디렉터리가 비어 있지 않습니다
- 디렉토리 생성 : makedirs(name, mode=0o777, existok=False) <- 여러 단계의 디렉토리를 한 번에 만들기
mkdir(name, mode=0o777) <- 하나의 디렉토리 만들기
- 디렉토리 제거 : removedirs(name)
rmdir(name)
-> 이 API들은 디렉토리 내에 파일이나 하위 디렉토리가 있으면 삭제하는 게 어려운 반면,
shutil.rmtree()는 내부에 파일이 있어도 알아서 삭제함 뿐만아니라, 에러가 발생했을 때
문제를 해결할 수 있는 메커니즘도 가지고 있음.
- 현재 디렉토리 : os.getcwd()
○ 파일 API
- stat : 파일이 가지고 있는 모든 속성에 대한 정보를 구할 수 있음
- rename : 파일의 이름을 변경
- unlink : 파일 삭제
4. os.path : 경로와 관련된 api
cf) pathlib이라는 고급 API 모듈이 있지만, 대부분 아직도 os.path를 사용하고 있음.
○ 경로명 자체 정보
- os.path.basename(path) : 디렉토리명
os.path.dirname(path) : 파일명
- os.path.splitext(path) : 파일명과 관련 있음(파일 이름 + 확장자) -> 확장자 분리 가능
※ 확장자는 파일의 종류를 구별하기 위해서 사용됨.
그래서 웹 서비스를 만들고 올바른 파일을 업로드하는지 확인할 때 첫 번째로 확인 해봐야함.
○ 경로명 조작 : 경로명은 환경변수를 이용하거나 다른 기호들을 조합해서 만들 수도 있음.
- os.path.expanduser(path)
os.path.expandvars(path)
- 경로명을 구분하는 문자는 운영체제마다 조금씩 다름(윈도우의 경우 : \, 리눅스나 맥의 경우 : /를 사용)
-> join()함수는 이런 고민을 해결해 줌.
os.path.join()
join() 함수는 주어진 문자열을 사용해서 하나의 경로명을 만들어 줌.(문자열 작업을 하는 것보다 코드가 명확해짐)
- 절대 경로와 상대 경로
os.path.abspath(path) : 절대 경로 반환
os.path.normpath(path) : 경로명을 단순하게 줄여줌
os.path.relpath(path, start = curdir) : 상대 경로 반환
○ 파일에 대한 기본 정보
- os.path.exists(path) : 주어진 경로(path)에 디렉토리 혹은 파일이 있는지 확인, 파일을 생성하기 전에 미리 파악해야 할 떄 사용, bool값
- os.path.isfile(path) : 파일인지 확인, bool값
- os.path.isdir(path) : 디텍토리 인지 확인, bool값
○ 파일에 대한 상세 정보
stat도 파일에 대한 상세 정보를 제공하지만, 너무 저수준 API이기 때문에 사용에 어려움이 있음
- os.path.getsize(path) : 파일 혹은 디렉토리 자체의 크기를 바이트 단위로 반환 -> 응용하여 현재 디렉토리의 전체 크기 게산 가능
os.path.getatime(path) : 파일에 접근한 시간
os.path.getmtime(path) : 파일에 수정한 시간
os.path.getctime(path) : 파일에 생성한 시간
'스마트웹앱콘텐츠전문가 > 파이썬(플라스크, 데이터 처리)' 카테고리의 다른 글
플라스크 (0) | 2018.12.06 |
---|---|
웹 관련 (0) | 2018.11.30 |
[python3]리스트 (0) | 2018.11.27 |
[그래픽 인터페이스] (0) | 2018.01.25 |
[네트워크 프로그래밍] (0) | 2018.01.24 |