我知道有更好的方法可以做到这一点。所以我称之为 " 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函数,但我猜测这不是正确的方法。 想法?
答案 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}}