通过SWIG在Python中访问UtcTimeStamp

5 投票
2 回答
1380 浏览
提问于 2025-04-16 22:06

我想这更多是一个关于Python和SWIG的问题...

我在使用一个C++的包,并且这个包有SWIG的Python绑定。
我收到的一个对象是一个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>

我该怎么从中提取数据呢?


更新:
我找到了一个叫UTCTimeStamp的类,它是从DateTime结构派生出来的 - 这个类是开源的QuickFix包的一部分。

不过我还是不知道怎么访问这些数据。DateTime有一些简单的获取函数,比如getYear() - 但是,我该怎么访问它们呢?

相关问题:

2 个回答

3

你试过用 obj.getYear() 吗?从文档来看,UTCTimeStamp 是从 DateTime 这个类派生出来的,所以你应该能使用父类的方法。

如果这样不行的话,当你执行 newobj = obj.next() 时,你得到的是什么类型的对象?你试过 print obj.__doc__? 吗?

补充一下,来自 http://www.swig.org/Doc1.3/Python.html#Python_nn27a 的内容:

这个指针值可以自由地传递给不同的 C 函数,这些函数期望接收某种类型的对象……唯一不能做的就是在 Python 中解引用这个指针。

所以你需要把它传递给一个可以接受 DateTime 的 C++ 函数的包装器。我不太清楚具体是什么,因为我不知道你在包装什么。

在这种情况下,那个是 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)
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')

撰写回答