파이썬 CMD 결과 값 받는 방법



cmd 결과 값 받는 방법


파이썬에서 os.system 명렁의 결과를 받고 싶을 때가 있을 것이다.

아래는 2.x 기준으로 os.system 의 결과를 받는 방법을 알아 볼 것이다.

일단 예제 부터 보겠다.

아래의 예제를 실행 하면 디스크 사용량을 백분율로 나타낸 결과 값이 출력 될 것이다. 


#! /usr/bin/python

# -*- coding: utf-8 -*-


import os

import sys

import shutil

import commands

from datetime import datetime, timedelta


(exitstatus, outtext) = commands.getstatusoutput('df -k | grep /home/test | awk \'{print $5}\'')


print outtext


예제를 봤으니 중요한 부분 설명을 하도록 하겠다.

import commands  를 import해야 cmd 결과를 받아 올 수 있다.

os.system 대신 commands.getstatusoutput 사용하여 시스템 콜을 한다.

시스템 콜의 결과가 outtext에 담겨지고 해당 값을 출력하면 

unix에서 시스템 콜 한 명령 결과와 일치하게 출력 되는 것을 확인 할 수 있다.

exitstatus는 성공, 실패 값을 담는 것 같은데 해당 내용은 사용을 안하니 넘어가도록 하겠다.

간략하게 사용방법은 다음과 같다.


 import commands

 ([실행 성공 여부 변수],[시스템 콜 결과 받는 변수]) = commands.getstatusoutput( 시스템 콜 명령어 예를 들어 linux/unix 명령어 )


이상으로 파이썬에서 cmd 결과 값을 받는 방법에 대해 알아 보았습니다.

도움이 되셨나요?



반응형

'프로그램 > Python' 카테고리의 다른 글

[Python] 예외처리 try, finally, except pass  (0) 2016.11.28
[Python] 예외 처리, try, except, else  (0) 2016.11.26
[Python] 모듈 #2  (0) 2016.11.13
[Python] 모듈 #1  (0) 2016.11.12
[Python]클래스(3)  (0) 2016.11.02

파이썬 예외 처리



try, finally


프로그램 수행 중 예외가 발생을 하던 발생하지 않던 사용했던 리소스는 무조건 반납을 해야 합니다.

반납을 하지 않으면 메모리 leak이 발생해 언젠가 컴퓨터에서 이상동작을 일으키기 때문이죠.

이번에는 프로그램 종료 전에 예외 발생 여부와 상관없이 실행되는 구문인 finally에 대해 알아보도록 하겠습니다.


우선 아래 예제를 보자

실행 해보면 '파일 종료' 문구가 출력되지 않는 것을 알 수 있다.


#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    f = open('C:\\newfile.txt','r')

    retval = 10/0

    print('파일 종료1')

    f.close()

    print('파일 종료2')

except ZeroDivisionError as e :

    print(e)



이와같이 파일 종료를 하기 전에 예외가 발생하여 종료를 하지 못하는 현상이 발생 될 수 있다.

해결 방법은 except 안에도 파일 종료 함수를 넣어주는데 이것은 같은 종료문을 두번써서 깔끔하지도 못하고 

소스를 보는데 방해만 된다.


아래는 좋은 방법이 아니다...

#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    f = open('C:\\newfile.txt','r')

    retval = 10/0

    print('파일 종료1')

    f.close()

    print('파일 종료2')

except ZeroDivisionError as e :

    print(e)

    print('파일 종료1')

    f.close()

    print('파일 종료2')



이제 finally를 사용하여 예외 발생 여부와 상관없이 종료를 시켜 보자


 try:

   [예외가 발생하는 실행 문]

 except 발생오류 as 오류 메시지 변수 :

   [보통 오류 메시지 발생된 것을 출력]

 finally:
   [예외 발생 여부와 상관없이 실행 해야 할 명령어]



#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    f = open('C:\\newfile.txt','r')

    retval = 10/0

except ZeroDivisionError as e :

    print(e)

finally:

    print('파일 종료1')

    f.close()

    print('파일 종료2')





try, pass



예외가 발생 하여도 처리하지 않고 회피 할 수 있는 방법이 있다.

그것은 바로 pass를 사용하는 것인데 특정 예외가 발생 하면 그 예외를 처리하지 않는 방법을 설명하겠다.


 try:

   [예외가 발생하는 실행 문]

 except 발생오류 as 오류 메시지 변수 :

   pass


예제는 아래와 같다. 

#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    retval = 10/0

except ZeroDivisionError as e :

    pass


반응형

'프로그램 > Python' 카테고리의 다른 글

[Python] Python cmd 결과 값 받는 방법  (0) 2016.12.12
[Python] 예외 처리, try, except, else  (0) 2016.11.26
[Python] 모듈 #2  (0) 2016.11.13
[Python] 모듈 #1  (0) 2016.11.12
[Python]클래스(3)  (0) 2016.11.02

파이썬 예외 처리



예외 처리의 필요성



프로그램을 수행하다가 예외가 발생하면 강제 종료가 되어 버린다.

예외가 발생해 프로그램 수행이 종료 되더라도 리소스 반환과 사용자가 알 수 있는 메시지를 출력하여

우화하게 종료 될 수 있도록 예외처리를 해야 한다.


다음 예제는 강제 종료가 되는 예제이다.


#!/usr/bin/python

# -*- coding: utf-8 -*-


retval = 10/0


아래와 같이 프로그램이 강제 종료가 된다.


Traceback (most recent call last):

  File "C:/6.��α� �����/python/try.py/try.py", line 4, in <module>

    retval = 10/0
ZeroDivisionError: integer division or modulo by zero



예외 처리 try ~ except




예외 처리를 하는 방법은 아래와 같다.

try: 다음에 예외가 발생 할지 모르는 실행문을 작성합니다.

예외가 발생하면 발생한 지점 이후는 실행하지 않고

바로 except 로 이동을 합니다.

except 다음에 프로그램을 실행 합니다.


 try:

   [예외가 발생하는 실행 문]

 except 발생오류 as 오류 메시지 변수 :

   [보통 오류 메시지 발생된 것을 출력]



위의 예제를 예외처리 해보겠습니다.

#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    retval = 10/0

except ZeroDivisionError as e :

    print(e)



아래와 같이 예외가 발생하여 메시지만 출력이 되며 강제 종료 되지 않는다.


integer division or modulo by zero



예외 처리 try ~ except ~ else




try 문에 수행 후 예외가 발생하지 않을 경우는 else를 사용해 실행문을 작성



 try:

   [예외가 발생하는 실행 문]

 except 발생오류 as 오류 메시지 변수 :

   [보통 오류 메시지 발생된 것을 출력]

 else:

   [예외 발생 하지 않을 경우 실행 문]


else를 사용하는 예제를 보겠습니다.

#!/usr/bin/python

# -*- coding: utf-8 -*-


try:

    retval = 10/2

except ZeroDivisionError as e :

    print(e)

else :
    print("retval : %d"%retval)


예외가 발생하지 않아 retval 값이 출력 된다.


retval : 5



이상으로 파이썬에서 예외처리 방법에 대해 설명 드렸습니다.

도움이 되셨나요?

반응형

'프로그램 > Python' 카테고리의 다른 글

[Python] Python cmd 결과 값 받는 방법  (0) 2016.12.12
[Python] 예외처리 try, finally, except pass  (0) 2016.11.28
[Python] 모듈 #2  (0) 2016.11.13
[Python] 모듈 #1  (0) 2016.11.12
[Python]클래스(3)  (0) 2016.11.02

파이썬 모듈 #2




모듈을 독립적 실행


앞에서 만든 모듈을 독립적으로 실행 하기 위해 이전 강의에서 만든 tool1.py 프로그램에 다음과 같이 1줄 추가 해 보겠다.


#!/usr/bin/python

# -*- coding: utf-8 -*-

def helloKorea():
    print("안녕하세요.")

def helloEnglish():
    print("Hello")

print("모듈 실행")#추가 부분


tool1.py를 실행 시키면 다음과 같이 출력 된다.


모듈 실행


하지만 tool1.py 모듈을 가져다 쓴 main을 실행시 다음과 같은 문제가 발생 된다.


모듈 실행 <<----------원치 않은 메시지 출력

안녕하세요.

Hello


tool1 모듈을 이용하는 프로그램은 모두 모듈 실행이라는 출력문이 발생 할 것이다.



__name__


위와 같이 내가 만든 모듈이 실행 될때만 모듈의 실행문이 실행 되고 싶을 때 어떻게 해야 할 지 고민을 될 것이다.

이것을 해결 하기 위해 __name__에 대해 알아보자

실행 되는 파일과 __name__이 호출 되는 파일이 일치하면 "__main__" 이라고 출력이 된다.

그래서 다음과 같이 tool1.py을 수정한다.


#!/usr/bin/python

# -*- coding: utf-8 -*-

def helloKorea():
    print("안녕하세요.")

def helloEnglish():
    print("Hello")

if __name__ == "__main__": #<<-- 내가 만든 모듈이 실행 될때만 모듈의 실행문이 실행 되고 싶을때 넣는다.
    print("모듈 실행")


tool1.py를 실행


모듈 실행


main.py를 실행


안녕하세요.

Hello


이전 모듈 설명 가기 ====> click

반응형

'프로그램 > Python' 카테고리의 다른 글

[Python] 예외처리 try, finally, except pass  (0) 2016.11.28
[Python] 예외 처리, try, except, else  (0) 2016.11.26
[Python] 모듈 #1  (0) 2016.11.12
[Python]클래스(3)  (0) 2016.11.02
[Python]클래스 (2)  (0) 2016.09.16

+ Recent posts