5

我想这是一个 python 与 SWIG 的问题,而不是其他任何事情......

我正在使用带有 SWIG Python 绑定的 C++ 包。我收到的一个对象是一个 UTC 时间戳,我试图从中提取时间戳。

该对象具有以下特点:

>>> print type(obj)
<type 'SwigPyObject'>

>>> print dir(obj)
['__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__hex__', '__init__', '__int__', '__le__', '__long__', '__lt__', '__ne__', '__new__', '__oct__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'acquire', 'append', 'disown', 'next', 'own']

>>> print obj
<Swig Object of type 'UtcTimeStamp *' at 0x0379F320>

如何从中提取数据?


更新:
我找到了派生自DateTime结构的UTCTimeStamp类- 它是开源QuickFix包的一部分。

但是我仍然不知道如何访问数据。DateTime 具有简单的 getter 函数,例如 getYear() - 但是,我如何访问它们?

4

2 回答 2

4

不要qfTimeField.getValue()在时间字段上使用,而是使用qfTimeField.getString(),然后只strptime()使用结果字符串。例如:

qfSendingTime = fix.SendingTime()
message.getHeader().getField(qfSendingTime)
my_datetime = datetime.strptime(qfSendingTime.getString(), '%Y%m%d-%H:%M:%S.%f')
于 2013-02-07T16:21:50.340 回答
2

你试过了obj.getYear()吗?它出现在UTCTimeStamp派生自的文档中DateTime,因此您应该能够访问父类的方法。

如果这不起作用,如果你这样做,你会得到什么样的对象newobj = obj.next()?你试过了吗print obj.__doc__?

编辑:来自http://www.swig.org/Doc1.3/Python.html#Python_nn27a

这个指针值可以自由地传递给期望接收类型对象的不同 C 函数......你唯一不能做的就是从 Python 中取消引用指针。

因此,您需要将其传递给可以采用DateTime. 我不知道具体是什么,因为我不知道你在包装什么。

在这种情况下,即http://www.quickfixengine.org/quickfix/doc/html/struct_f_i_x_1_1_utc_time_stamp_convertor.html。我相信,尽管我无法对此进行测试,但您可以这样称呼它:

import quickfix
converter = quickfix.UtcTimeStampConverter()
string = converter.convert(obj)
于 2011-07-22T20:47:27.717 回答