是否可以在 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中使用吗?