可选参数Python?

时间:2012-04-21 16:46:00

标签: python command-line-arguments argparse

我需要创建一个名为extractGenes.py

的程序

命令行参数需要采用2 OR 3参数:

  1. -s是一个可选参数或开关,表示用户wwants拼接的基因序列(内含子被删除)。用户不必提供这个(意味着他想要整个基因序列),但是他确实提供了它然后它必须是第一个参数

  2. 输入文件(带基因)

  3. 输出文件(程序将创建存储fasta文件的位置

  4. 该文件包含以下行:

    NM_001003443 chr11 + 5925152 592608098 2 5925152,5925652, 5925404,5926898,
    

    但是,我不确定如何将-s可选参数包含在启动函数中。

    所以我开始:

    getGenes(-s, input, output):
    fp = open(input, 'r')
    wp = open(output, "w")
    

    但不确定如何加入-s

3 个答案:

答案 0 :(得分:3)

这种情况很简单,可以直接使用sys.argv

import sys

spliced = False
if '-s' in sys.argv:
    spliced = True
    sys.argv.remove('-s')
infile, outfile = sys.argv[1:]

或者,您也可以使用更强大的工具(如argparseoptparse)来生成命令行解析器:

import argparse

parser = argparse.ArgumentParser(description='Tool for extracting genes')
parser.add_argument('infile', help='source file with the genes')
parser.add_argument('outfile', help='outfile file in a FASTA format')
parser.add_argument('-s', '--spliced', action='store_true', help='remove introns')

if __name__ == '__main__':
    result = parser.parse_args('-s myin myout'.split())
    print vars(result)

答案 1 :(得分:2)

Argparse是一个python库,它将为您处理可选参数。 http://docs.python.org/library/argparse.html#module-argparse

答案 2 :(得分:0)

尝试这样的事情:

def getGenes(input, output, s=False):
    if s:
        ...
    else:
        ...

如果输入2个参数,则s为False; getGenes(输入,输出)

如果使用3个参数调用getGenes(),则s将是第3个参数,因此在这种情况下使用任何非False值调用它将产生else子句。