Python:optparse是否可以具有ACTION属性来同时执行STORE和STORE\u TRUE?

2024-09-28 22:24:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用optparse获取命令行输入。在

假设我正在运行一个脚本demo.py,它创建了一些输出。但除非指定命令行输入,否则输出不会写入文件。在

我正努力做到以下几点:

命令行中的python demo.py应该运行脚本,但不能在任何地方写入输出。在

命令行中的python demo.py -o应该将输出写入我的默认文件名output.txt。在

命令行中的python demo.py -o demooutput.txt应该将输出写入文件demooutput.txt。在

我不想从optparse切换到argparse。在


Tags: 文件命令行pytxt脚本outputdemo文件名
3条回答

我不认为有不幸的-我能想到的唯一方法就是通过添加自己的逻辑语句来解决问题。下面的代码应该能做到这一点。在

import re, sys
import optparse from OptionParser    
usage = "usage: %prog [options] arg"
parser = OptionParser(usage)
if '-f' in argv:
    a = argv.index('-f')
    if (a != len(argv)-1) and re.search('[.]txt', argv[a+1]):
        parser.add_option("-f", " foo", dest="foo")
    else:
        parser.add_option("-f", dest="foo", action="store_true")

这并不能回答直接的问题“如何定义操作…”,但它以一种简单的方式处理输入。在

'-o'设置为'store_true'。如果为True,请检查'args'变量的文件名。在

(options, args) = parser.parse_args()
if options.o:
    if args:
        dest = args[0]
    else:
        dest = 'output.txt'
else:
    dest = ''

(在argparse中,相当于用nargs='?'定义一个位置参数。)

如果这些是唯一的参数,您也可以通过检查文件名而不需要`-o'来实现。在

另一种可能性-“store_const”,位置“filename”具有优先级:

^{pr2}$

您可以使用optparse-callbacks来实现这一点。在

下面是它将如何为您的用例工作。在

parser.add_option("-o", action="callback", dest="output", callback=my_callback)

def my_callback(option, opt, value, parser):
     if len(parser.rargs) > 0:
         next_arg = parser.rargs[0]
         if not next_arg.startswith("-"):
             # Next argument is not another option
             del parser.rargs[0]
             setattr(parser.values, option.dest, next_arg)
             return
     # If not processed, set the default value
     setattr(parser.values, option.dest, "output.txt")

相关问题 更多 >