是否可以在Python中使用类似Windows命令行的选项?

3

如何让一个Python脚本接受Windows格式的命令行选项(即使用“/”而不是“-”或“--”作为前缀,并使用“:”来指定选项值,而不是“=”)?

目前,我已经使用了argparse并成功地使用了“/”作为前缀,但无法将其用作分隔符。

parser = argparse.ArgumentParser(prog='PROG', prefix_chars='/')
parser.add_argument('/f')
parser.add_argument('/bar')

#This works with =
print(parser.parse_args('/f X /bar=Y'.split())) #Namespace(bar='Y', f='X')
#Does not work with :
print(parser.parse_args('/f:X /bar:Y'.split())) #blows up

1
看起来没有配置可以更改分隔符,因为它似乎是硬编码的(https://github.com/python/cpython/blob/7ae19ef5cf5d4f464588133bd48f81d80ea54aee/Lib/argparse.py#L2195)。 - S.Au.Ra.B.H
1个回答

0

你可以手动完成。我很快地完成了这个过程,所以它并不是最终结论。它只是为了概述如何手动完成。

import sys

# List of switches to watch for
switches = ['test', 'blah', 'g']

if __name__ == '__main__':
    for arg in sys.argv:
        if arg[0] == '/':
            arg = arg[1:]  # Remove /
            if ':' in arg:
                a1, v1 = arg.split(':')  # Separate arg:value
            else:
                a1 = arg
                v1 = None
            # parse for whole words/letters that take values
            if a1 in switches:
                print(f'caught {a1}')
            if v1 is not None:
                print(f'^ and it\'s value {v1}')
            else:
                for op in range(0, len(arg)):
                    # Do whatever for switches
                    print(f'caught {arg[op]}')

python test.py /fa /test:big /g:vals 的输出:

caught f
caught a
caught test
^ and it's value big
caught g
^ and it's value vals

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接