Post List

2015년 10월 7일 수요일

Python : command line argument 처리 및 calling external command

1. Python에서 command line argument 처리하기 (명령인자 처리하기)

  * Python application 실행시 argument를 같이 전달 할 경우 sys.argvlist 형식으로 전달됩니다.

import sys

print
(sys.argv)

    위의 내용으로 argv.py 파일 생성 후 실행을 해 봅니다.

D:\02.Source\Python\PyQt\PyFHashFile>argv.py --add a + b
['D:\\02.Source\\Python\\PyQt\\PyFHashFile\\argv.py', '--add', 'a', '+', 'b']

    argv[0] 에는 실행파일 이름이 들어가며 그 뒤로 실행시 입력한 argument 들이 하나씩 들어 있습니다.

2. Python에서 calling external command 처리하기 (외부 프로그램 실행하기)

  * subprocess library의 Popen() 메써드를 사용하면 됩니다.
    (사실 PopenPopen이라는 class의 constructor 입니다.)
  * Popen() 메써드의 첫번째 인자로 명령어를 전달하면 됩니다.
    (명령어에 인자도 같이 전달할 경우 list로 전달이 가능합니다.)
  * 수행되는 외부 프로그램은 비동기로 실행됩니다.
    (해당 프로그램의 실행이 끝나지 않더라도 application은 계속 진행됩니다.)
  * 외부 프로그램이 끝날때까지 기다려야 할 경우 .wait() 메써드를 사용하면 됩니다.

  * subprocess.Popen()의 자세한 사용법은 Python Reference를 참조하시기 바랍니다.

    https://docs.python.org/3.4/library/subprocess.html?highlight=popen#subprocess.Popen

  예제 : 파일 하나를 cabarc.exe 를 이용하여 .cab 파일로 압축하는 예제 입니다.

def MakeCab(fileName, cabName):
    subprocess.Popen("mkdir temp", shell = True, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
    subprocess.Popen(["copy", fileName, "temp"], shell = True, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
    p = subprocess.Popen(["cabarc", "-r", "-p", "-P", "temp\\", "n", cabName, "temp\\*.*"],
        shell = True, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
    p.wait()
    subprocess.Popen("rmdir /s/q temp", shell = True, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)

 windows command 에서 입력하는 명령어들을 이용해서 어렵지 않게 이해가 가능하시리라 믿습니다. ㅎ
  통상적으로 첫번째 인자만 지정하면 됩니다. stdout, stderr을 따로 지정하면 실행 결과가 shell 창에 나타나지 않고 Popenreturn 타입에 저장됩니다.

= subprocess.Popen("dir", shell = True, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
for line in p.stdout.readlines():
    print(line)

  위의 code를 실행하면 dir 명령어의 결과가 p에 저장되므로 Python code에서 활용이 가능합니다.

댓글 없음:

댓글 쓰기