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

Posted

技术标签:

【中文标题】是否可以在 Python 中使用 Windows 样式的命令行选项?【英文标题】:Is it possible to use Windows-style command line options with Python? 【发布时间】:2021-02-24 23:45:10 【问题描述】:

是否可以让 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

【问题讨论】:

看不到更改分隔符的配置,因为它看起来是hardcoded。 【参考方案1】:

您可以手动完成。我做的很快,所以这绝不是决定性的。它只是为了概述它是如何手动实现的。

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

【讨论】:

以上是关于是否可以在 Python 中使用 Windows 样式的命令行选项?的主要内容,如果未能解决你的问题,请参考以下文章

我可以将Windows dll包装在Linux下的Python中使用吗?

如何在 python (Windows) 中播放声音

是否可以在不安装 Python 的情况下在 Windows 上安装 Robot Framework?

如何在 Python 中创建 Windows 服务?

如何知道windows中的进程是不是在python中运行

Python IO 是不是允许在 Windows 上删除/重命名打开的文件?