Ошибка конвертации при конвертации устройства Redhawk с 1.8.4 на 1.9

Я использую Редхок 1.9. Я создал устройство Redhawk из IDE 1.8.4.

  • 1.8.4 Устройство Redhawk (создано со всеми настройками по умолчанию)
  • Реализация С++
  • Импорт существующего проекта в 1.9 IDE
  • Я прочитал примечания к выпуску Redhawk 1.9 о том, как конвертировать проекты 1.8.4 и 1.9 *http://redhawksdr.github.io/Documentation/Release_Notes_1.9.0.pdf*

Я импортирую устройство 1.8.4 по умолчанию в 1.9 IDE. Я могу запустить и собрать устройство 1.8.4 в 1.9 IDE. Когда я пытаюсь перегенерировать код для устройства 1.8.4, IDE спрашивает, хочу ли я обновиться до 1.9. Во всплывающем окне говорится: «ConversionTestDevice использует устаревшие генераторы кода. Хотите обновить этот проект?». Решил сделать апгрейд. Затем я получаю следующее сообщение об ошибке:

/usr/local/redhawk/core/bin/update_project возвращен с кодом ошибки 1

Трассировка (последний последний вызов): файл «/usr/local/redhawk/core/bin/update_project», строка 222, в ? если check_bulkio_input(compCpp): файл "/usr/local/redhawk/core/bin/update_project", строка 105, в check_bulkio_input для строки в strip_comments(open(filename, 'r')): файл "/usr/local/redhawk /core/bin/update_project", строка 86, в strip_comments ch += safe_next(chars) File "/usr/local/redhawk/core/bin/update_project", строка 56, в safe_next return next(item) NameError: глобальное имя «следующий» не определен

Я был бы признателен за предложения о том, как преобразовать устройство 1.8.4 в устройство 1.9.


person JONATHAN LUELLEN    schedule 09.12.2013    source источник
comment
Я обнаружил, что скрипт python update_project несовместим с Python версии 2.4.3. Похоже, что эта версия Python не распознает следующую команду на итераторе. При попытке использовать более позднюю версию Python сценарий обновления работал должным образом.   -  person JONATHAN LUELLEN    schedule 10.12.2013
comment
Я использовал CentOS 5.3, который поставляется с Python версии 2.4.3.   -  person JONATHAN LUELLEN    schedule 10.12.2013


Ответы (1)


Основываясь на вашем сообщении об ошибке «NameError: глобальное имя «следующий» не определено» и содержании версии 1.9.0 сценария python update_project, я предполагаю, что вы используете версию python ниже 2.6. Следующая функция — это встроенная функция Python, представленная в Python 2.6 (http://docs.python.org/2/library/functions.html#next). Это известная ошибка в сценарии обновления, поскольку он должен быть совместим как с Python 2.4, так и с Python 2.6 (установки Python по умолчанию в CentOS 5 и 6 соответственно). Чтобы исправить это, вы можете изменить сценарий update_project, расположенный в $OSSIEHOME/bin/update_project, и определить следующую функцию:

if not hasattr(__builtins__, 'next'):
    # Python 2.4 does not have a free-standing next() function
    def next(iterator, default):
        """
        Backwards compatibility next() equivalent for Python 2.4.
        """
        try:
            return iterator.next()
        except StopIteration:
            return default

Затем вы должны удалить ранее определенную функцию «safe_next».

Наконец, вам нужно заменить два вызова «safe_next» вызовом новой реализации следующей функции и добавить второй аргумент пустой строки ''

Для ясности ниже приведена разница update_project с этими изменениями:

@@ -46,16 +46,16 @@ Options:

 _bulkio_re = re.compile('BULKIO_data[A-Za-z]+_In_i')

-def safe_next(item):
-    """
-    Returns the next value of the iterator, or an empty string if the end of
-    iteration has been reached. Allows string processing to gracefully handle
-    the end of a line without explicit catch statements.
-    """
-    try:
-        return next(item)
-    except StopIteration:
-        return ''
+if not hasattr(__builtins__, 'next'):
+    # Python 2.4 does not have a free-standing next() function
+    def next(iterator, default):
+        """
+        Backwards compatibility next() equivalent for Python 2.4.
+        """
+        try:
+            return iterator.next()
+        except StopIteration:
+            return default

 def strip_comments(source):
     """
@@ -75,7 +75,7 @@ def strip_comments(source):
                 # Look for end comment token; if the end of the line is reached
                 # ch will be an empty string
                 while ch == '*':
-                    ch = safe_next(chars)
+                    ch = next(chars, '')
                     if ch == '/':
                         inComment = False
                         break
@@ -83,7 +83,7 @@ def strip_comments(source):
             if ch == '/':
                 # Read the next character to see if it matches a comment token
                 # (if it does not, both characters will be added to the output)
-                ch += safe_next(chars)
+                ch += next(chars, '')
                 if ch == '/*':
                     # Comment, start discarding
                     inComment = True
person Youssef Bagoulla    schedule 11.12.2013