os
출처: https://devanix.tistory.com/304?category=271929
os module
from os import *
import os
로 사용해야한다.os.open()
이 built-in open()
을 가리는 것을 피할 수 있다.os.system()
import os
os.system("mkdir {}/workspace".format(og.getenv('HOME'))
# 즉, /bin/sh 로 실행하는 쉘 프로그램하나를 실행
source
, shopt
와 같은 bash shell용 명령어를 사용하고 싶다.
#!/bin/bash
subprocess
모듈을 사용해야한다.
subprocess 모듈 참고
os.getcwd()
import os
print( os.getcwd() )
--- 출력 ---
/Users/yangdonghyeon/workspace
os.getpid()
import os
print( os.getpid() )
--- 출력 ---
59373
os.chdir()
import os
print(os.getcwd()) #/Users/yangdonghyeon/workspace
os.chdir( os.getcwd()+'/scripts/src' )
print(os.getcwd()) #/Users/yangdonghyeon/workspace/scripts/src
os.access(path, mode)
: 허가권path
에 대해서 mode
에 해당하는 작업이 가능한지 여부 반환mode | description |
---|---|
os.F_OK | 해당 path의 존재 여부 확인 |
os.R_OK | 해당 path의 읽기 여부 확인 |
os.W_OK | 해당 path의 쓰기 여부 확인 |
os.X_OK | 해당 path의 실행 가능여부 확인 |
os.listdir(path)
os.mkdir(path[,mode])
None
반환os.makedirs(path[,mode])
- 이미 **디렉토리가 생성**되어 있는 경우나 **권한이 없어 생성할 수 없는 경우**는 **예외**발생
os.readlink(path)
os.readlink('/etc/fonts/conf.d/70-yes-bitmaps.conf')
../conf.avail/70-yes-bitmaps.conf
os.remove(path), os.unlink(path)
os.rmdir(path)
os.removedirs(path)
os.rename(src,dst)
os.renames(src,dst)
os.stat(path)
os.walk(path)
root
: 아래 처럼 처음 root
디렉토리dirs
: root
에서 보이는 디렉토리files
: root
에서 보이는 파일들import os
if __name__ == "__main__":
root_dir = "./test/"
for (root, dirs, files) in os.walk(root_dir):
print("root : " + root)
if len(dirs) > 0:
for dir_name in dirs:
print("dir: " + dir_name)
if len(files) > 0:
for file_name in files:
print("file: " + file_name)
# ----------------
root : ./test/
dir: folder1
dir: folder3
dir: folder2
file: file1.txt
root : ./test/folder1
file: file2.txt
root : ./test/folder3
dir: folder4
file: file5.txt
file: file6.txt
root : ./test/folder3/folder4
file: text3.txt
file: text2.txt
file: text.txt
root : ./test/folder2
file: file3.txt
file: file4.txt
#-----
os.walk(root_dir, topdown=False)
for root, dirs, files in os.walk(target):
print(root)
root
만으로도 쭉 디렉토리를 ./target
부터 쭉 순회한다.출처: 링크
dir(os.path)
import os
print(dir(os.path))
--- 출력 ---
['__all__', '__builtins__', '__cached__', '__doc__', '__file__', \
'__loader__', '__name__', '__package__', '__spec__', '_get_sep', \
'_joinrealpath', '_varprog', '_varprogb', 'abspath', 'altsep', \
'basename', 'commonpath', 'commonprefix', 'curdir', 'defpath', \
'devnull', 'dirname', 'exists', 'expanduser', 'expandvars', \
'extsep', 'genericpath', 'getatime', 'getctime', 'getmtime', \
'getsize', 'isabs', 'isdir', 'isfile', 'islink', 'ismount', \
'join', 'lexists', 'normcase', 'normpath', 'os', 'pardir', \
'pathsep', 'realpath', 'relpath', 'samefile', 'sameopenfile', \
'samestat', 'sep', 'split', 'splitdrive', 'splitext', 'stat', \
'supports_unicode_filenames', 'sys']
os.environ
: 환경 변수 전체 (dict)import os
print(os.environ.get('HOME')) : echo ${HOME}
dict
의 .get
을 이용해, Key
가 없는 경우, None
을 리턴함os.getenv()
: 특정 환경변수 값 얻기import os
print(os.getenv("PATH")) # ${PATH} value
print(os.getenv("HELLO")) # ${HELLO} 라는 환경 변수는 현재 없음 -> None
--- 출력 ----
내 환경의 PATH들
None
None
반환os.environ[]
: 특정 환경변수 값 얻기import os
WORKSPACE=os.environ['WORKSPACE'] # ${WORKSPACE} 를 받아서 python code에서 활용하게함
import os
# 1. get existing environment
existing_path = os.getenv['PATH']
new_path = "hello:"+existing_path # "hello:$PATH"
# 2. set new path
os.environ['PATH']=new_path # PATH=hello:$PATH
Goal: export $PATH="hello:$PATH"
작동하게 하는 python script
import sys
existing_path=os.getenv("PATH") # 기존의 $PATH 값을 가져온다.
new_path="hello:"+existing_path # hello:$PATH
os.environ["PATH"] = new_path # export $PATH="hello:$PATH" 역할
print(os.getenv("PATH")) # 확인
os.path
os.path.join('A','B)
import os
path=os.path.join(str1,str2)
e.g.
str1 = '/my/path'
str2 = 'file'
path = os.path.join(str1, str2)
print(path)
# === 출력 === #
/my/path/file
A = '/my/path'
B = '/include' # '/'가 prefix로 있으면 안됨!!
path = os.path.join(A,B)
# path = '/inlcude'
os.path.isdir()
: directory인가?import os
print( os.path.isdir( get.cwd() )
--- 출력 ---
True
os.path.isdir( arg )
: arg
로 주어진 문자열 경로가 디렉토리인가?return | description |
---|---|
True | 주어진 arg 경로는 디렉토리이다. |
False | 주어진 arg 경로는 디렉토리가 아니다. |
os.path.abspath(path)
: abs 경로 반환os.path.abspath( path )
:os.path.basename(path)
os.path.dirname(path)
os.path.commonprefix(list)
common prefix
를 찾아 반환os.path.exists(path)
존재?path
에 파일, 디렉토리가 존재하는지 유(True
)/무(False
) 리턴os.path.isfile(path)
os.path.isdir(path)
os.path.isabs()
os.path.isabs(path)¶
path가 절대 경로명이면 True를 반환합니다. 유닉스에서는 슬래시로 시작하고, 윈도우에서는 잠재적 드라이브 문자를 잘라낸 후 (역) 슬래시로 시작함을 의미합니다.
버전 3.6에서 변경: 경로류 객체를 받아들입니다.
os.path.normcase(path)
normcase
로 OS에 맞게 디렉터리 층을 나눈다.os.path.normpath(path)
normpath
는 path를 정규화한다.os.path.split(path)
path
= dirname
/basename
으로 나눈다.os.path.splitext(path)
os.path.splitext(path) -> Tuple
import os
PWD=os.getcwd()
print('%s%s%s' % ('\'',PWD,'\''))
print(os.path.splitext(PWD))
# === 출력 === #
'/home/pllpokko/workspace/python_exercise'
('/home/pllpokko/workspace/python_exercise', '')
os.path.realpath()
os.path.relpath()
: 상대경로 구하기import os
LIBDIR = '/opt/sdk/2.19.0.g/sysroot/x86_64-sdk-linux/usr/lib'
BINDIR = '/opt/sdk/2.19.0.g/sysroot/x86_64-sdk-linux/usr/bin'
relpath = os.path.relpath(LIBDIR, BINDIR)
print(relpath)
# =========================== #
'../lib'
/usr/bin 기준에선, lib로 가려면, ../lib니까
os.path.relpath("/tmp/foo/bar", "/tmp")
foo/bar
os.path.relpath("/tmp/foo/bar", "/usr/bin")
../../tmp/foo/bar
glob
glob.glob(path)
ls
와 유사한 기능을한다.* ? [0-9]
)(workspace) $ ls
= glob.glob(os.getcwd()+'/*'))
list
로 returnglob.iglob(path)
list
로 담지 않기 때문에 결과가 매우 많다면 유용함