Python/Python 모듈탐구

[Python] - 모듈탐구 os - Python으로 내 컴퓨터 조작하기

와 글이 날아갔다. 다시 쓴다. os는 Python에 내장되어있는 모듈 중 하나로, 저수준의 파일과 디렉터리 작업을 지원한다.(고수준의 기능과 확장성, 이식성이 필요하다면 shutil이라는 더 적합한 모듈이 있다.)

옛날 Latte에는 DOS OS를 이용한 window를 사용을 했다.(그 때의 Window는 이런 이쁘장한 화면 없었다~ 이 말이야)

검은 화면에 글자로 상호작용하는, 지금으로 치면 cmd명령프롬포트가 사용자와의 인터페이스 역할을 해주었다. os는 python수준에서 컴퓨터의 파일 시스템과 파일에 접근 / 처리를 지시할 수 있는 Python수준의 기능을 제공한다. 그러면 바로 만나보자



* 이 모듈탐구시간에는 WINDOW에서 사용되는 os모듈 함수들만을 다룬다 *
* 파일디스크립터 함수는 나도 잘 모르는 것이라 제대로 된 이해를 하기 전까지 정리하지 않을 것이다 *



환경변수 관련 함수

1. os.environ() : 문자열로 환경변수를 반환한다.
2. os.environb() : 바이트로 환경변수를 반환한다.
3. os.getenv(key) : key에 해당하는 환경변수 value를 반환한다. 두 번째 파라미터로 default=None을 넣을 수 있는데, KeyError시 default값을 반환한다.
4. os.getenvb(key) : key에 해당하는 환경변수 value를 바이트로 반환한다. 역시 두 번째 파라미터로 default=None을 넣을 수 있다.
5. os.putenv(key,value) : key에 해당하는 환경변수 value를 추가한다.
* 환경변수란 시스템에 전역으로 정의된 변수를 의미한다. 예를 들면 명령프롬포트에 notepad.exe(System32 폴더 아래)를 쳐서 현재 디렉터리에 없는 notepad.exe를 실행할 수 있는 이유는 기본적으로 탐색할 디렉터리인 PATH라는 환경변수에 C:\Windows\System32가 추가되어있기 때문이다.

 

 


호스트 정보 알아내기

1. os.getlogin() : 현재 로그인한 사용자의 이름을 반환한다.
2. os.cpu_count() : 시스템의 CPU수를 반환한다. 없으면 None을 반환한다.(응? 없을 수 있나?)

 

 


디렉터리 탐색

1. os.getcwd() : 현재 작업경로를 절대 경로로 반환한다.
2. os.getcwdb() : 현재 작업경로를 절대 경로로 바이트 반환한다.
3. os.chdir(path) : 현재 작업경로를 path로 설정한다.(상대 경로도 인정한다)
4. os.listdir(path) : path 디렉토리에 있는 항목들의 이름을 담고 있는 LIST를 반환한다. path가 생략되면 현재 디렉터리를 탐색
5. os.scandir(path) : path 디렉토리에 있는 항목들의 이름을 담고 있는 순서 없는 Iterator를 반환한다. path가 생략되면 현재 디렉터리이며, 현재 경로인 ".", 상위 경로인 ".."은 포함하지 않고, scandir.close()로 종료된다.
5. os.lstat(filename) : 주어진 경로에 대해 lstat 명령어를 실행한다(파일의 속성을 가져오는 명령어 이다)
6. os.readlink(path) : path인 심볼릭 링크가 가리키는 경로를 문자열로 반환한다.

* scandir로 생성된 Iterator는 DirEntry라는 객체로 반환되는데, name, path, inode 등 파일 속성에 대한 정보를 가지고 있다.

 


파일, 디렉터리 조작

1. os.mkdir(path) : path라는 디렉터리를 생성한다.
2. os.makedirs(name) : 재귀적으로 name의 디렉터리를 생성한다.(ex : 상위 폴더가 없으면 그것도 만들고, 위에 것도 만든다.)
3. os.remove(path) : 파일 path를 제거한다. path가 디렉터리인 경우 Exception이 발생된다.
4. os.rmdir(path) : 디렉터리 path를 제거한다. 디렉터리가 존재하지 않거나 비어있지 않으면 Exception이 발생된다.
5. os.removedirs(name) : 재귀적으로 name의 디렉터리를 제거한다.(ex : 상위 폴더도 없애고, 그 위 것도 없애고)
6. os.rename(src, dst) : src를 dst로 이름을 바꾼다 이미 dst가 존재하는 경우 Exception이 발생된다.
7. os.renames(old, new) : old를 new로 재귀적으로 이름을 바꾼다.(만약 new에 없는 디렉터리 경로가 있으면 생성한다.)
8. os.symlink(src, dst) : dst를 가리키는 소프트 링크 src를 생성한다
9. os.truncate(path, length) : 강제로 path파일을 length 크기에 맞춘다.(이거 무슨 침대 있지 않았나?) 자르는 것이다.

 


프로세스 조작

1. os.abort() : 현재 실행 중인 프로세스에 SIGABRT 시그널을 보낸다.
2. os.add_dll_directory(path) : DLL탐색경로에 path를 추가한다.(안 써봐서 이건 모르겠다.)
3. os.execl(path, args...) : 현재 프로세스를 대체해서 새로운 프로세스를 생성한다. 이는 Python에 결과를 반환하지 않는다. (ex : os.execl("notepad.exe")는 현재 Python이 종료되고, 메모장이 실행된다.
4. os._exit(n) : 종료 코드 n으로 프로세스를 종료시킨다.
5. os.kill(pid, sig) : 프로세스 pid에 시그널 sig를 전송한다. 그룹 단위로 전송하는 killpg도 있다.
6. os.popen(cmd) : 이거 할 말 많은 함수인데, 명령 프롬포트와 파이프라인을 연결한다. Python에서 다른 명령줄(cmd)을 실행할 때 사용된다. subprocess모듈과 깊은 관련이 있고, 관련 내용은 모듈 탐구가 아닌, 다른 포스팅으로 자세하게 소개하겠다.
7. os.startfile(path) : 파일 탐색기에서 path를 두 번 클릭하는 것과 같은 결과이다. 따라서 os.startfile()은 시작하자마자 끝난다.
8. os.system(command) : 프로그램이 별도의 명령 프롬포트(cmd)(사실 여기선 SHELL이 맞는 말이다.)을 실행하여 command를 실행한다. 이 또한 위 popen처럼 별도의 포스팅에서 서술한다.
9. os.times() : 모든 프로세스 시간을 반환한다.
10. os.waitpid(pid, 0) : 지정된 pid의 프로세스가 종료될 때까지 기다린다.

 

 


* 출처 : https://docs.python.org/ko/3/library/os.html

 

os — 기타 운영 체제 인터페이스 — Python 3.9.4 문서

os — 기타 운영 체제 인터페이스 소스 코드: Lib/os.py 이 모듈은 운영 체제 종속 기능을 사용하는 이식성 있는 방법을 제공합니다. 파일을 읽거나 쓰고 싶으면 open()을 보세요, 경로를 조작하려면 o

docs.python.org



한 번씩 써 본 함수만 적은 건데 엄청나게 많은 함수가 있고 포스팅에 적힌 os모듈은 반의반도 기술되지 않은 것이기에 놀라울 따름이다. 공식 홈페이지 문서는 꼭 찾아볼 것!