Gidhub BE Developer

OS 모듈

2018-02-11
goodGid

os 모듈


chdir()

  • chdir() 함수는 현재 작업 디렉터리 위치를 변경한다.

getcwd()

  • getcwd() 함수는 현재 작업 디렉터리의 위치를 가져온다.
import os

print(os.getcwd())
os.chdir('tool')
print(os.getcwd())



/Users/gy8971/Desktop/gid/1.Programming/Python
/Users/gy8971/Desktop/gid/1.Programming/Python/tool

os.listdir(path)

  • os.listdir(path)는 해당 경로에 존재하는 파일과 디렉터리 목록을 반환한다.
import os

print(os.listdir('.'))


['.DS_Store', ':momory', 'init.py', 'test.db', '.vscode', 'tool']

os.midkr(path[, mode])

  • os.midkr(path[, mode])는 [path]에 해당하는 디렉터리를 생성한다.
import os

os.mkdir('test_dir')
print(os.listdir('.'))

['.DS_Store', ':momory', 'test_dir', 'init.py', 'test.db', '.vscode']

os.makedirs(path[, mode])

  • os.makedirs(path[, mode])는 인자로 전달된 디렉터리를 재귀적으로 생성한다.

  • 이미 디렉터리가 존재하거나 권한이 없는 경우 예외를 발생시킨다.

  • 아래 예제는 test를 먼저 생성하고 [ sub1, sbu2, leaf ] 를 순차적으로 생성한다.

import os

os.makedirs('test/sub1/sub2/leaf')
print(os.listdir('test/sub1/sub2'))
os.makedirs('test/sub1/sub2/leaf')




['leaf']
Traceback (most recent call last):
  File "/Users/gy8971/Desktop/gid/1.Programming/Python/init.py", line 5, in <module>
    os.makedirs('test/sub1/sub2/leaf')
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/os.py", line 220, in makedirs
    mkdir(name, mode)
FileExistsError: [Errno 17] File exists: 'test/sub1/sub2/leaf'

os.remove(path), os.unlink(path)

  • os.remove(path), os.unlink(path)는 파일을 삭제한다.
import os


os.remove('test.txt')
os.unlink('test.txt')

os.rmdir(path)

  • os.rmdir(path)는 디렉터리를 삭제한다. 단 디렉터리는 비어 있어야 한다.
import os


os.rmdir('test')

os.removedirs(path)

  • os.removedirs(path) 디렉터리를 연달아 삭제한다.

  • 아래 예제의 경우 leaf 디렉터리 삭제에 성공하면 차례로 [ sub2, sub1, test ]의 순서로 삭제된다.

import os


os.removedirs('test/sub1/sub2/leaf')


os.rename(src, dst), os.renames(src, dst)

  • os.rename(src, dst)는 src를 dst로 이름을 변경하거나 이동한다.

  • os.renames(src, dst)는 src를 dst로 이름을 변경하거나 이동한다.
    rename과 다른 점은 이동 시 필요한 디렉터리를 자동으로 생성한다.

  • 파일이나 디렉터리에 대해 모두 적용된다.

import os

os.rename('text.txt','renamed.txt')
os.renames('text.txt','test/move.txt')

['move.txt']

os.stat(path)

  • os.stat(path)는 경로에 해당하는 정보를 얻어온다.

  • protection, inode, device, link, user id, group id, size, last access time, last modified time, last change time


import os

print(os.stat('test/move.txt'))



os.stat_result(st_mode=33188, st_ino=8594660815, st_dev=16777221, st_nlink=1, st_uid=501, st_gid=20, st_size=0, st_atime=1518321545,st_mtime=1518321545, st_ctime=1518321684)

os.utime(path, times)

  • os.utime(path, times)는 경로에 해당하는 파일에 대해 액세스 시간수정 시간을 [times]로 수정한다.

  • [times]가 None일 경우는 현재 시간으로 수정한다.

  • 유닉스의 touch 명령어와 유사하다.


import os

print(os.stat('test/move.txt'))
os.utime('test/move.txt', None)
print(os.stat('test/move.txt'))



os.stat_result(st_mode=33188, st_ino=8594660815, st_dev=16777221, st_nlink=1, st_uid=501, st_gid=20, st_size=0, st_atime=1518321545,st_mtime=1518321545, st_ctime=1518321684)

os.stat_result(st_mode=33188, st_ino=8594660815, st_dev=16777221, st_nlink=1, st_uid=501, st_gid=20, st_size=0, st_atime=1518321959,st_mtime=1518321959, st_ctime=1518321959)

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

  • os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])는 top으로 지정된 디렉터리를 순회하며 경로, 디렉터리명을 순차적으로 반환한다.

  • 다음 구조로 디렉터리를 만들고 실행해보자.

- test
   + a
   + b
     + readme.txt

import os



for path, dirs, files in os.walk('test'):
    print(path, dirs, files)


for path, dirs, files in os.walk('test', topdown=False):
    print(path, dirs, files)




test ['a', 'b'] []
test/a [] []
test/b [] ['readme.txt']



test/a [] []
test/b [] ['readme.txt']
test ['a', 'b'] []

os.pipe()

  • os.pipe()파이프를 생성한다. 함수를 실행하면 Read / Write 전용 파이프의 파일 디스크립터가 반환된다.

  • 파이프는 주로 부모 프로 / 자식 프로세스 간의 통신을 목적으로 사용한다.

  • 파이프란 프로세스 간 통신을 위한 공유 영역이다.

  • 여러 프로세스 간에 정보를 주고받기 위해 만들어지는 공간이며, 하나의 프로세스가 정보를 쓰면 다른 프로세스에서 읽을 수 있다.

import os



print(os.pipe())

(3, 4)

os.fdopen(fd[, mode[, bufsize]])

  • os.fdopen(fd[, mode[, bufsize]])는 파일 디스크립터를 이용해 파일 객체를 생성한다.
import os



r, w = os.pipe()
rd = os.fdopen(r)
wd = os.fdopen(w)
print(r)
print(w)
print(rd)
print(wd)


3
4
<_io.TextIOWrapper name=3 mode='r' encoding='UTF-8'>
<_io.TextIOWrapper name=4 mode='r' encoding='UTF-8'>


os.name

  • os.name은 파이썬이 실행되는 운영체제의 이름을 나타낸다. ‘nt’, ‘posix’, ‘mac’ 등의 결과가 반환된다.
import os


print(os.name)


posix

os.getpid(), os.getppid()

  • os.getpid()는 현재 프로세스 아이디를 반환한다.

  • os.getppid()는 부모 프로세스 아이디를 반환한다.

import os


print(os.getpid())
print(os.getppid())



14441
13493

os.getenv(varname[, value])

  • os.getenv(varname[, value])는 환경 변수값을 얻어 온다.

  • 해당 환경 변수가 없을 경우에는 인잘로 전달된 [value] 값을 반환한다.

  • [value]값 없이 [varname]만 넘겼을 경우 환경 변수가 없으면 None을 반환한다.

import os


print(os.getenv('homepath'))
print(os.getenv('tmp','1'))

None
1

os.putenv(varname, value)

  • os.putenv(varname, value)은 환경 변수 [varname]을 [value]로 설정한다.

  • 자식 프로세스에게 영향을 미친다.

import os


print(os.getenv('test'))
os.putenv('test','putenv_test')
print(os.getenv('test'))


os.strerror(code)

  • os.strerror(code)는 에러 코드에 해당하는 에러 메시지를 보여준다.
import os


print(os.strerror(0))
print(os.strerror(1))
print(os.strerror(2))
print(os.strerror(3))
print(os.strerror(404))



Undefined error: 0
Operation not permitted
No such file or directory
No such process
Unknown error: 404

Comments

Content