Доступ к UtcTimeStamp из Python через SWIG - PullRequest
5 голосов
/ 23 июля 2011

Полагаю, что это вопрос «питон против 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>

Как мне извлечь из него данные?


UPDATE:
Я обнаружил класс UTCTimeStamp , который является производным от структуры DateTime - он является частью пакета QuickFix с открытым исходным кодом.

Однако я до сих пор не знаю, как получить доступ к данным. DateTime имеет простые функции получения, такие как getYear () - но как мне получить к ним доступ?

Ответы [ 2 ]

3 голосов
/ 07 февраля 2013

Вместо использования 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')
2 голосов
/ 23 июля 2011

Вы пробовали obj.getYear()? Из документации следует, что UTCTimeStamp происходит от DateTime, поэтому вы должны иметь доступ к методам родительского класса.

Если это не сработает, какой объект вы получите, если сделаете newobj = obj.next()? Вы пробовали print obj.__doc__?

Редактировать: с http://www.swig.org/Doc1.3/Python.html#Python_nn27a:

Это значение указателя может быть свободно передано различным функциям C, которые ожидают получить объект типа ... Единственное, что вы не можете сделать, это разыменовать указатель из Python.

Так что вам нужно передать его в оболочку для функции C ++, которая может принимать 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)
...