为多个参数接受多个值会导致意外结果

Accepting more than one value for more than one argument causes unexpected result

我有以下文档 __doc__ :

"""gene_sense_distribution_to_csv
Usage:
    gene_sense_distribution_to_csv.py <gene> <csv_out> <filenames>... [--min_count=<kn>] [--gene_regions=<kn>]
    gene_sense_distribution_to_csv.py -h | --help
    gene_sense_distribution_to_csv.py params
    gene_sense_distribution_to_csv.py example

Options:
    -h --help            Shows this screen.
    --min_count=<kn>     Minimal number of reads in a pileup line in order to consider it in the analysis [default: 0]
    --gene_regions=<kn>  All the gene regions you want to plot. Options: 5utr, 3utr, exon. The default is all of them. Separate them by space [default: ['5utr', '3utr', 'exon']]
"""

我正在尝试让 --gene_regions 参数像 <filenames> 那样接受多个参数。

我试图通过更改此行来做到这一点
gene_sense_distribution_to_csv.py <gene> <csv_out> <filenames>... [--min_count=<kn>] [--gene_regions=<kn>]
收件人:
gene_sense_distribution_to_csv.py <gene> <csv_out> <filenames>... [--min_count=<kn>] [--gene_regions=<kn>...]

但是通过尝试执行命令python SCRIPT_NAME GENE OUTPUT_PATH INPUT_PATH --gene_regions exon intron
我得到以下参数:

{'--gene_regions': ['exon'],
 '--help': False,
 '--min_count': '0',
 '<csv_out>': 'out',
 '<filenames>': ['example', 'intron'],
 '<gene>': 'Y74C9A.6',
 'example': False,
 'params': False}

如您所知,<filenames> 参数得到 intron 而我的意思是 --gene_regions 会得到它。
关于如何解决此问题的任何想法?

编辑:我遇到了一个解决方法,只需执行 python SCRIPT_NAME GENE OUTPUT_PATH INPUT_PATH --gene_regions 'exon, intron' 并解析它。

仍然希望得到一个不是解决方法的答案。

您需要重复选项和值,例如:

... --gene_regions exon --gene_region intron

这是一个完整的例子(使用“gene_region”,单数):

"""gene_sense_distribution_to_csv
Usage:
    gene_sense_distribution_to_csv.py <gene> <csv_out> <filenames>... [--min_count=<kn>] [--gene_region=<kn> ...]
    gene_sense_distribution_to_csv.py -h | --help
    gene_sense_distribution_to_csv.py params
    gene_sense_distribution_to_csv.py example

Options:
    -h --help            Shows this screen.
    --min_count=<kn>     Minimal number of reads in a pileup line in order to consider it in the analysis [default: 0]
    --gene_region=<kn>   All the gene regions you want to plot. Options: 5utr, 3utr, exon. The default is all of them. Specify multiple times...
"""
$ ./gene_sense_distribution_to_csv.py gene1 csvout file1 file2 --min_count=mm --gene_region=r2 --gene_region=r3 --gene_region r4
{'--gene_region': ['r2', 'r3', 'r4'],
 '--help': False,
 '--min_count': 'mm',
 '<csv_out>': 'csvout',
 '<filenames>': ['file1', 'file2'],
 '<gene>': 'gene1',
 'example': False,
 'params': False}

OT:将选项放在参数之前是个好主意,在某些情况下给你更多的自由(参见 -- 特殊参数),ref https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

gene_sense_distribution_to_csv.py [--min_count=<kn>] [--gene_region=<kn> ...] <gene> <csv_out> <filenames>...