将optparse输入插入函数调用

时间:2014-08-21 21:16:22

标签: python python-2.7 optparse

我知道有更好的方法可以做到这一点。所以我称之为 " myApp -v 182"。我希望将182转换为十六进制,然后将其输入我导入的另一个函数(doThis)。我发现的唯一方法就是使用exec函数。我确定必须有更好的。 Python 2.7

from optparsese import OptionParser
import doThis
usage = "usage: %prog [options] arg1 arg2"
parser = OptionParser(usage)

parser.add_option("-v", "--value", action="store", type="int", dest="value",
                  help="enter the decimal value of the hex you wish")

(options,args) = parser.parse_args()
def myFunc():
    myHex = hex(options.value)
    # the first two values are fixed, the last is what needs to supply
    doThis.withThis(0xbc,0xa3,myHex)
    # the only way I've gotten this to work is kind of lame
    exec('doThis.withThis(0xbc,0xa3,' + myHex + ')')

myFunc()

我得到典型的" No方法匹配给定的参数"当我尝试直接插入myHex时。它适用于exec函数,但我猜测这不是正确的方法。 想法?

1 个答案:

答案 0 :(得分:1)

您不需要在值hex()上调用doThis.withThis(0xbc, 0xa3, options.value)

hex()

>>> 0xa3 163 >>> hex(163) '0xa3' >>> type(0xa3) <type 'int'> >>> type(hex(163)) <type 'str'> >>> eval(hex(163)) 163 返回字符串,而在Python代码中使用十六进制表示法则产生一个常规整数:

0xa3

请注意163实际上只是十进制拼写eval()的一种不同方式,optparse再次将该值转换为整数。

type="int"无法对您的&#39;整数进行同样的操作。在命令行输入的值;通过设置0x,您可以指示它识别相同的语法。来自Standard option types documentation

  

如果号码以0xa3开头,则将其解析为十六进制数

并且输出相同;命令行上的163为您提供整数值>>> import optparse >>> optparse._parse_int('0xa3') 163

{{1}}