* Python application 실행시 argument를 같이 전달 할 경우 sys.argv에 list 형식으로 전달됩니다.
import sys
print(sys.argv)
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() 메써드를 사용하면 됩니다.
(사실 Popen은 Popen이라는 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 창에 나타나지 않고 Popen의 return 타입에 저장됩니다.
p = subprocess.Popen("dir", shell = True, stdout = subprocess.PIPE, stderr = subprocess.STDOUT) for line in p.stdout.readlines(): print(line)
위의 code를 실행하면 dir 명령어의 결과가 p에 저장되므로 Python code에서 활용이 가능합니다.
댓글 없음:
댓글 쓰기