Python для Jython Gotchas? - PullRequest
       18

Python для Jython Gotchas?

2 голосов
/ 28 апреля 2011

Я начинаю процесс перехода с python на jython.Кто-нибудь делал это с легкостью раньше?Какие есть ошибки?Должен ли я сначала собрать внутри Jython IDE, а затем развернуть или как?

Ответы [ 2 ]

4 голосов
/ 12 мая 2011

Имейте в виду, что в jython при работе под Java все является «Big-Endian» независимо от того, на какой платформе вы находитесь, тогда как на платформе PC / Linux / Mac (x86) python - это Little Endian. Убедитесь, что при использовании struct.pack и struct.unpack вы используете соответствующий префикс

без префикса

запись данных (enessw.py)

import struct 
f = file('tmp.dat', 'wb') # binary 
f.write(struct.pack('IIII', 1,2,3,4)) # default endianess

чтение данных (enessr.py)

import struct
f = file('tmp.dat', 'rb')
data = f.read()
ints = struct.unpack('IIII', data) # default endianess
print repr(ints)

Результаты

Пишите с помощью Python, читайте с помощью Jython

C:\Documents and Settings\mat99856\My Documents\tmp>python enessw.py

C:\Documents and Settings\mat99856\My Documents\tmp>python enessr.py
(1, 2, 3, 4)

C:\Documents and Settings\mat99856\My Documents\tmp>jython enessr.py
(16777216L, 33554432L, 50331648L, 67108864L)

Запись с использованием jython, чтение с использованием python

C:\Documents and Settings\mat99856\My Documents\tmp>jython enessw.py

C:\Documents and Settings\mat99856\My Documents\tmp>jython enessr.py
(1L, 2L, 3L, 4L)

C:\Documents and Settings\mat99856\My Documents\tmp>python enessr.py
(16777216, 33554432, 50331648, 67108864)

Исправление

Используйте <в строке формата для упаковки и распаковки. Это даст команду pack / unpack, что данные должны иметь формат с прямым порядком байтов. </p>

С ' C:\Documents and Settings\mat99856\My Documents\tmp>python enessw.py C:\Documents and Settings\mat99856\My Documents\tmp>python enessr.py (1, 2, 3, 4) C:\Documents and Settings\mat99856\My Documents\tmp>jython enessr.py (1L, 2L, 3L, 4L) C:\Documents and Settings\mat99856\My Documents\tmp>jython enessw.py C:\Documents and Settings\mat99856\My Documents\tmp>jython enessr.py (1L, 2L, 3L, 4L) C:\Documents and Settings\mat99856\My Documents\tmp>python enessw.py C:\Documents and Settings\mat99856\My Documents\tmp>python enessr.py (1, 2, 3, 4) C:\Documents and Settings\mat99856\My Documents\tmp>jython enessr.py (1L, 2L, 3L, 4L) Ссылки struct.pack

2 голосов
/ 28 апреля 2011

Основная проблема в том, что в Jython нет ни стандартных, ни сторонних библиотечных модулей, которые используют C в качестве своей реализации.Или скомпилированные вспомогательные модули CИх довольно много, и они могут неожиданно возникнуть.

Кроме того, Jython намного медленнее.

Это действительно зависит от того, что вы переносите, и насколько это зависит от сторонних модулей и от того, сколько «чистого» Python он использует.

Я ожидаю, однако, много проблем с такой миграцией.Большинство Jython, которые я знаю, написаны с нуля, чтобы делать определенные вещи с классом Java, в основном для тестирования.

...