我正在编写一个脚本,该脚本在一个或多个输入文件中搜索正则表达式。如果没有提供输入文件(或者有"-"
而不是文件),则应在stdin
中进行搜索。
示例:myscript.py [-h] [-u | -c | -m] [infile [infile ...]] regex
我不明白的是-它如何区分文件名和正则表达式?
假设我输入了myscript.py file1 file2 regex
。怎么知道regex
是一个正则表达式而不是另一个文件?
我的代码如下:
def init_parser():
parser = argparse.ArgumentParser(
description="The script searches one or more named input files for lines\
containing a match to a regular expression pattern."
)
parser.add_argument(
'-f','--infile', nargs='*', type=argparse.FileType('r'), default='-',
help='the name of the file(s) to search.'
)
parser.add_argument('regex', help='the regular expression.')
group = parser.add_mutually_exclusive_group()
group.add_argument(
'-u', '--underscore', action='store_true',
help='prints "^" under the matching text.'
)
group.add_argument(
'-c', '--color', action='store_true',
help='highlights matching text.'
)
group.add_argument(
'-m', '--machine', action='store_true',
help='generates machine readable output.'
)
return parser
由于没有用于指定正则表达式的标志,因此脚本无法区分文件和正则表达式。如果我没有指定文件(因为我想从stdin
中读取文件),它会认为我的正则表达式是文件,并且失败。
答案 0 :(得分:0)
假设您在命令行上始终有一个正则表达式,如果先放置正则表达式参数,然后再输入infile,则将使用您指定的其他位置参数:
parser.add_argument('regex', help='the regular expression.')
parser.add_argument('infile', nargs='*', type=argparse.FileType('r'), help='the name of the file(s) to search.')