Python optpasse,有一个选项取决于另一个选项
有没有办法让以下各项发挥作用? 我所寻找的是,基于另一个选项的价值,有一个选项的价值Python optpasse,有一个选项取决于另一个选项,python,command-line-arguments,Python,Command Line Arguments,有没有办法让以下各项发挥作用? 我所寻找的是,基于另一个选项的价值,有一个选项的价值 import optparse parser = optparse.OptionParser() parser.add_option("--file-name", default="/foo/bar", dest="file_name") parser.add_option("--file-action", default="cp %s /bar/baz" % (options.file_name
import optparse
parser = optparse.OptionParser()
parser.add_option("--file-name", default="/foo/bar", dest="file_name")
parser.add_option("--file-action",
default="cp %s /bar/baz" % (options.file_name),
dest="fileaction")
options, args = parser.parse_args()
显然,就目前而言,它不会起作用,因为
赋值前引用的局部变量“选项”您以后必须调整默认值。如果该选项为默认选项,则进行按摩:
parser.add_option("--file-action",
default="cp <filename> /bar/baz",
dest="fileaction")
options, args = parser.parse_args()
if options.fileaction == "cp <filename> /bar/baz":
options.fileaction = "cp %s /bar/baz" % (options.file_name)
parser.add_选项(“--file action”,
default=“cp/bar/baz”,
dest=“fileaction”)
选项,args=parser.parse_args()
如果options.fileaction==“cp/bar/baz”:
options.fileaction=“cp%s/bar/baz”%(options.file\u name)
也就是说,在本例中,fileaction和filename似乎冲突,因此同时设置两者是毫无意义的,它们将以不明显的方式相互覆盖。我让fileaction默认为“cp”
,并为'/bar/baz'
添加一个--action target
,然后从这些片段构造调用。只需将它们都包含在内:
parser.add_option("--file-name", dest="file_name")
parser.add_option("--file-action", dest="file_action")
您可以使用简单的逻辑
if options.file_name:
#do code relating to file_action
甚至
if options.file_action and not options.file_name:
raise ValueError("No Filename specified")
# do your code here.
您的解析器是一个处理程序。它将解释python在程序启动时,您将如何处理收到的命令行。因此,在您的选项中具有依赖性是不正确的 我建议您处理代码中的默认行为。您可以执行以下操作:
parser.add_option("--file-action",
default=None,
dest="fileaction")
options, args = parser.parse_args()
# Manage the default behaviour
if not options.fileaction:
fileaction = "cp %s /bar/baz" % (options.file_name)
# You could then use fileaction the way you would use options.fileaction
该解决方案唯一的问题是
\u默认值将出现在“帮助”中,使其有点难看。@DawidFatyga:True。事实上,想想看,你甚至不需要一个记号笔。只要它解决为默认,它就会工作。我相应地更新了答案。好的-当有文件操作时会发生什么,如何将其设置为包含文件名?-还有,什么时候可以用空格分隔同一个参数的单词将参数传递给optpass?@InbarRose:你可以用引号,不是吗?我的观点是不要在文件操作中包含文件名。optparse
模块自Python 2.7以来就被弃用了。您可以考虑使用<代码> AgPARSE> <代码>(),它也可以用于Python 2 .x:<代码> PIP安装AgPARSE> <代码>谢谢您的评论,但是,更改当前代码库不在列表中;我认为您没有考虑清楚这一点,首先,文件操作不应该包括文件名,否则就没有理由首先将文件名作为参数。另外,如果您打算让一个脚本接收一个文件名和一个文件操作,然后对该文件执行该操作,为什么不简单地使用3个参数“file name”“file command”“file arguments”然后根据需要将它们放在一起?@InbarRose文件名
和文件操作
仅用于示例,它们在我的程序中不是真正的用途。