标签: optparse

optparse - 为什么可以忽略该选项的最后一个字符?使用`--file`它的行为与`--fil`相同

这是代码的简单示例:

from optparse import OptionParser

parser = OptionParser()
parser.add_option("-f", "--file", dest="filename")

(options, args) = parser.parse_args()
print options
Run Code Online (Sandbox Code Playgroud)

我已将其保存到文件并运行.有用:

$ python script.py --file some_name
{'filename': 'some_name'}
Run Code Online (Sandbox Code Playgroud)

但这是诀窍:

$ python script.py --fil some_name
{'filename': 'some_name'}
Run Code Online (Sandbox Code Playgroud)

它也适用于未声明的选项fil.为什么它以这种方式表现?

python optparse

7
推荐指数
1
解决办法
169
查看次数

Python optparse默认值与函数默认值

我正在编写一个python脚本,我希望能够从命令行调用并导入为库函数.理想情况下,命令行选项和函数应使用相同的默认值集.允许我在两个地方重用一组默认值的最佳方法是什么?

这是具有重复默认值的当前代码.

from optparse import OptionParser

def do_stuff(opt1="a", opt2="b", opt3="c"):
    print opt1, opt2, opt3

if __name__ == "__main__":
    parser = OptionParser()
    parser.add_option("--opt1", default="a")
    parser.add_option("--opt2", default="b")
    parser.add_option("--opt3", default="c")
    #parser.set_defaults(opt1="a")

    options, args = parser.parse_args()

    do_stuff(*args, **vars(options))
Run Code Online (Sandbox Code Playgroud)

python dry optparse

6
推荐指数
1
解决办法
1066
查看次数

Python optparse和参数中的空格

当使用optparse我希望在一个选项后得到整个字符串,但我只能将它的一部分放到第一个空格.

例如:

python myprog.py --executable python someOtherProg.py
Run Code Online (Sandbox Code Playgroud)

我在'可执行'中得到的只是'python'.

是否可以使用optparse解析这些行,或者您是否必须使用argparse来执行此操作?

€:我已经尝试将其封装在"s中.但是在深入研究代码之后,我发现子进程调用无法处理参数.

带有命令行的字符串被塞入列表'args'.

args = [self.getExecutable()] + self.getArgs().split()
Run Code Online (Sandbox Code Playgroud)

就像是

"[python D:\\\workspace\\\myprog\\\src\\\myprog.py]"
Run Code Online (Sandbox Code Playgroud)

这给了我系统找不到文件异常.我用的时候

args[0]
Run Code Online (Sandbox Code Playgroud)

有用.但我放弃了可执行文件的参数.

如果第一个地方没有获得字符串,则子进程模块会从列表中构建cmdline,因此我暂时无法解释该行为.

python optparse

6
推荐指数
2
解决办法
2万
查看次数

使用python的optparse时在帮助消息中显示换行符

我正在使用optparse模块进行选项/参数解析.出于向后兼容性原因,我无法使用argparse模块.如何格式化我的epilog消息以保留换行符?

在下面的例子中,我希望将epilog打印为格式化.

    epi = \
"""
Examples usages:
  Do something
  %prog -a -b foo
  Do something else
  %prog -d -f -h bar
"""
    parser = optparse.OptionParser(epilog=epi)
Run Code Online (Sandbox Code Playgroud)

python optparse

6
推荐指数
1
解决办法
4468
查看次数

Python optparse,默认值和显式选项

采用以下相当标准的代码:

from optparse import OptionParser                         
opts = OptionParser()
opts.add_option('-f', action="store_true")
opts.add_option("-x", dest="x", type="int", default=1)
options, args = opts.parse_args()
Run Code Online (Sandbox Code Playgroud)

假设-x并且-f是互斥的:当-x-f明确存在时,应报告错误.

如何检测是否-x明确存在?即使不是,也options列出默认值.

一种方法是避免设置我宁愿不会做的默认值,因为--help打印默认值很好.

另一种方法是检查其中sys.argv的实例-x是否有点尴尬,如果有多个名称-x(即, - long-name)并且有多对互斥选项.

它有一个优雅的解决方案吗?

python optparse

6
推荐指数
2
解决办法
8066
查看次数

Ruby中的OptionParse和params不以' - '开头

我希望有这样的参数:

program dothis --additional --options
Run Code Online (Sandbox Code Playgroud)

和:

program dothat --with_this_option=value
Run Code Online (Sandbox Code Playgroud)

而且我无法理解如何做到这一点.我唯一能做的就是--在开始时使用参数.

有任何想法吗?

ruby optparse

6
推荐指数
1
解决办法
2121
查看次数

python - 初学者 - 在程序中集成optparse

我已经开始认真学习Python作为我的第一门编程语言,并掌握一些算法基础知识.由于每个人都建议最好的方法是找到有用的东西,我决定用一个小脚本来管理我的存储库.

基本事项: - 启用/禁用YUM存储库 - 更改当前YUM存储库的优先级 - 添加/删除存储库

虽然解析文件并替换/添加/删除数据非常简单,但我正在努力(主要是因为可能缺乏知识)与'optparse'的单一事物......我想添加一个选项(-l)列出了当前可用的存储库...我已经创建了一个简单的函数来完成这项工作(不是非常详细的),但是我无法将它与optparse上的'-l'连接起来.任何人都可以提供如何做到这一点的例子/建议?

当前脚本是这样的:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys
import optparse
import ConfigParse

repo_file = "/home/nmarques/my_repos.repo"

parser = optparse.OptionParser()
parser.add_option("-e", dest="repository", help="Enable YUM repository")
parser.add_option("-d", dest="repository", help="Disable YUM repository")
parser.add_option("-l", dest="list", help="Display list of repositories", action="store_true")
(options, args) = parser.parse_args()

def list_my_repos()
    # check if repository file exists, read repositories, print and exit
    if os.path.exists(repo_file):
        config = ConfigParser.RawConfigParser()
        config.read(repo_file)
        print "Found the following YUM repositories on " + …
Run Code Online (Sandbox Code Playgroud)

python optparse

6
推荐指数
2
解决办法
893
查看次数

Python:从optparse切换到argparse

从optparse切换到argparse后 - 我遇到了奇怪的错误.Argparse仅在不留空间时解析args:

myScript.py -oOpt
Run Code Online (Sandbox Code Playgroud)

或者给出一个等号:

myScript.py -o=Opt
Run Code Online (Sandbox Code Playgroud)

并且它不能正常工作:

myScript.py -o Opt
Run Code Online (Sandbox Code Playgroud)

这是我的argparse初始化:

#!/usr/bin/env python
# to get description use the -h flag

import argparse, os, sys


# ======================
# Python2.7 is expected:

if sys.version_info[0] != 2 or sys.version_info[1] < 7:
    sys.exit('This program needs Python2.7+')


# ==========
# preambule:

desc = """Enter dirs in the current dir and makes gro out of state.cpt there."""
# parser = argparse.ArgumentParser()
parser = argparse.ArgumentParser(description=desc, version='2.3', formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('-w', '--workWith',
                    help = 'to specify a …
Run Code Online (Sandbox Code Playgroud)

python shell optparse command-line-arguments argparse

6
推荐指数
1
解决办法
4502
查看次数

OptionParser - 支持命令行末尾的任何选项

我正在编写一个小程序,它应该在远程服务器上执行一个命令(让我们说一个合理的愚蠢的包装器ssh [hostname] [command]).

我想这样执行它:

./floep [command] 

但是,我需要不时传递某些命令行:

./floep -v [command]

所以我决定使用optparse.OptionParser.问题是,我有时命令也有参数,如果我这样做,它可以正常工作:

./floep -v "uname -a"

但我也希望它在我使用时起作用:

./floep -v uname -a

我的想法是,只要我遇到第一个非选项参数,之后的所有内容都应该成为我命令的一部分.

然而,这给了我:

Usage: floep [options]

floep: error: no such option: -a

OptionParser是否支持此语法?如果是这样:怎么样?如果不是:解决这个问题的最佳方法是什么?

python optparse

5
推荐指数
1
解决办法
4559
查看次数

Optparse回调不消耗参数

我试图optparse更好地了解,但我很难理解为什么以下代码的行为方式.我做了些蠢事吗?

import optparse

def store_test(option, opt_str, value, parser, args=None, kwargs=None):
    print 'opt_str:', opt_str
    print 'value:', value

op = optparse.OptionParser()
op.add_option('-t', '--test', action='callback', callback=store_test, default='test', 
    dest='test', help='test!')

(opts, args) = op.parse_args(['test.py', '-t', 'foo'])

print
print 'opts:'
print opts
print 'args:'
print args
Run Code Online (Sandbox Code Playgroud)

输出:

opt_str: -t
value: None

opts:
{'test': 'test'}
args:
['foo']

为什么'foo'不被传递给store_test()而是被解释为额外的参数?有什么问题op.parse_args(['-t', 'foo'])吗?

http://codepad.org/vq3cvE13

编辑:

以下是文档中的示例:

def store_value(option, opt_str, value, parser):
    setattr(parser.values, option.dest, value)
[...]
parser.add_option("--foo",
                  action="callback", callback=store_value,
                  type="int", nargs=3, dest="foo")
Run Code Online (Sandbox Code Playgroud)

python optparse

5
推荐指数
1
解决办法
3036
查看次数

标签 统计

optparse ×10

python ×9

argparse ×1

command-line-arguments ×1

dry ×1

ruby ×1

shell ×1