반응형
파이썬 스크립트에서 중간에 윈도우 CMD 명령어를 수행하고 싶다면 어떻게 해야할까?
보통 아래와 같이 두가지 방법을 사용한다.
1. os.system
>>> import os
>>> os.system('cd')
C:\Python27
0
>>> os.system('dir')
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: 3C-44
C:\Python27 디렉터리
2020-04-12 오후 08:11 <DIR> .
2020-04-12 오후 08:11 <DIR> ..
2020-04-12 오후 08:11 <DIR> DLLs
2020-04-12 오후 08:11 <DIR> Doc
2020-04-12 오후 08:11 <DIR> Tools
5개 파일 671,023 바이트
10개 디렉터리 31,853,121,536 바이트 남음
os 모듈을 임포트해서 system 함수를 사용하여 리눅스 명령어를 수행한다. 파이썬을 수행하는 환경에 명령어를 전달하여 수행한다. os.system은 인자값으로 명령어만 전달해주면 수행해주기 때문에 직관적이나, 명령어의 결과값들을 변수에 저장할 수 없다는 한계가 있다. os.system 의 결과는 프로세스의 수행 결과 값을 리턴하는데 보통 성공하면 0을 리턴하고 실패했을 때는 그에 맞는 에러 코드가 반환된다.
만약 출력값을 저장하고 싶다면 아래와 같이 popen을 통해 명령어를 수행하고 read를 통해 읽는 방법을 통해 출력값을 변수에 저장할 수 있다.
import os
>>> path = os.popen('cd').read()
>>> path
'C:\\Python27\n'
>>> i = os.popen('whoami').read()
>>> i
'desktop-n59v670\\lyuqja\n'
2. subprocess
import subprocess
>>> subprocess.call("whoami")
desktop-n59v670\l12341on
0
>>> subprocess.call("type README.md", shell=True)
Hello World
0
subprocess 모듈을 통해서도 리눅스 명령어를 수행할 수 있다.
대략적인 사용방법은 위와 같다.
만약 출력값을 변수에 전달하고 싶을때는 check_output 명령어를 통해서 할 수 있다.
>>> import subprocess
>>> text = subprocess.check_output("type README.md", shell=True)
>>> text
b'Hello world\n'
>>> i = subprocess.check_output("whoami")
>>> i
b'desktop-n59\no1234\n'
반응형
'Python' 카테고리의 다른 글
[python] list에서 중복되는 원소 지우기 (2) | 2021.05.30 |
---|---|
[python] pycache, pyc 캐시 데이터 삭제 명령어 in linux (0) | 2021.05.30 |
[python] 파이썬으로 리눅스 쉘 명령어 수행하기 (0) | 2021.04.15 |
[python] 문자열 포맷팅 (str.format)에서 중괄호{} 출력하는법 (0) | 2021.04.15 |
[python] 파이썬 명령행 인자 받기 (sys.argv) (1) | 2019.12.24 |