我有一个 python 程序,它修改另一个程序的配置文件,然后调用该程序。另一个程序使用配置文件来定义几何形状,然后将特定的电压施加到不同的几何元素。我希望能够在命令行上指定应用于指定配置元素的电压。例如,配置文件可以指定名为“base”的元素具有1伏的电压,而名为“LeftDot”的另一个元素具有1.4伏的电压。我想要一个类似于以下内容的命令:
$ python myprogram.py --config configfile1.txt --base 1.0 --LeftDot 1.4
但是,对于另一个配置文件,未定义“base”和“LeftDot”,而是该文件使用“LeftNode”和“LowerGate”:
$ python myprogram.py --config configfile3.txt --LeftNode 2.4 --LowerGate 0.6
在查看 argparse 和 optparse 文档时,我没有找到一种方法能够查找直到运行时我才知道其名称的命令行参数(当我打开配置文件时,我可以轻松地看看哪些元素需要施加电压,但仅在运行时。)有没有办法告诉 argparse 将所有它无法识别的东西交给我自己的函数?感谢您的帮助。
最佳答案
整个配置是在运行时完成的。这些示例使用字符串常量作为名称,但您不受此限制。
您首先加载配置,然后当您拥有所有元素时,只需循环这些元素并将它们注册为参数:
parser = argparse.ArgumentParser(....)
for element in configuration_elements:
parser.add_argument('--' + element, type=float, ...)
然后解析你的命令行。
或者,argparse.ArgumentParser()
作为 partial parsing mode以及;只需调用 parser.parse_known_args() 来解析 argparse 所知道的所有内容,它将返回一个命名空间对象(它可以解析的所有选项)及其剩余参数不知道如何处理:
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
_StoreAction(option_strings=['--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_known_args(['--foo', '42', '--spam', 'eggs'])
(Namespace(foo='42'), ['--spam', 'eggs'])
在上面的例子中,.parse_known_args()
不知道如何处理'--spam'
和'eggs'
参数,因此它返回了那些供您自己的代码处理的内容。 --foo 42
参数已被处理。
关于python - 如何使用在运行时更改的 python 命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17373916/