One of the BioPythonTip
제목에서 알 수 있듯이 이 패키지는 다른 어플리케이션을 실행하고 제어하는 내용을 포함한다. 대다수의 다른 커맨드라인 어플리케이션들은 커맨드라인에 명령어 적고, 인수를 쭈욱 써주게 된다. 이 패키지는 이들 인수를 보다 편리하게 관리 할 수 있도록 해주며, 실행결과역시 Undo가 가능한 file handler 형태로 만들어준다.
Application/init.py 파일을 보면,
커맨드라인에 관한 AbstractCommandline 클래스
- 옵션에 관한 _Option 클래스
- 아규먼트에 관한 _Argument 클래스가 있다.
- 그리고, 정작 그 어플리케이션을 실행시키는 generic_run 함수가 있다.
사용방법은 AbstractCommandline 클래스를 상속받는 자신만의 어플리케이션 커맨드라인 클래스를 다음처럼 만든다.
아래 예에서는 "myappl" 이라는 OS path에 잡혀있는 프로그램을 실행한다고 할때, 또한 그 프로그램이 -sequence, -outfile, -task, -umereturn, - includedragion 의 옵션을 필요로 한다고 할때 다음과 같다.
1 from Bio.application import AbstractCommandline, _Option, _Argument, generic_run
2
3 class MyApplCommandline(AbstractCommandline):
4 def __init__(self, cmd = "myappl"):
5 AbstractCommandline.__init__(self)
6 self.program_name = cmd
7
8 self.parameters = [
9 _Option(["-sequence"], ["input"], None, 1,
10 "Sequence to choose primers from"),
11 _Option(["-outfile"], ["output", "file"], None, 1,
12 "Output file name"),
13 _Option(["-task"], ["input"], None, 0),
14 _Option(["-numreturn"], ["input"], None, 0),
15 _Option(["-includedregion"], ["input"], None, 0),
16 ]
_Option 클래스의 construction를 적절히 이용하여 프로그램이 사용하는 option과 argument를 적절히 self.parameters에 세팅한다.
그리고 나서, 그 객체를 만들고,
theMyAppCom = MyApplCommandline("myappl")
그 객체를 다음 함수의 인수로 전달한다.
generic_run(theMyAppCom)
그러면, 세개짜리 튜플을 얻게 되는데
- 해당 프로그램의 일반적 옵션세팅상황의 객체
- 해당 프로그램의 Standard output 실행결과의 undo가능 파일핸들러
해당프로그램의 StdErr 결과의 undo가능 파일 핸들러이다.
이상의 방법을 사용하면, 복잡한 옵션 및 아규먼트가 필요한 커맨드라인 프로그램을 [Python]내에서 용이하게 관리할 수 있다는 장점이 있으며, Stdout 의 파일핸들러가 언도가능 파일핸들러라는 장점이 있다.
자세한 사항은 Bio/Application/__init.py 파일의 주석을 참고한다.