将Redhawk设备从1.8.4转换为1.9时的转换错误

时间:2013-12-09 15:56:55

标签: redhawksdr

我正在使用Redhawk 1.9。我已经从1.8.4 IDE创建了一个Redhawk设备。

我将默认的1.8.4设备导入1.9 IDE。我能够在1.9 IDE中运行和构建1.8.4设备。当我尝试重新生成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):   在check_bulkio_input中输入文件“/ usr / local / redhawk / core / bin / update_project”,第105行     for strip_comments中的行(open(filename,'r')):   strip_comments中的文件“/ usr / local / redhawk / core / bin / update_project”,第86行     ch + = safe_next(chars)   在safe_next中输入文件“/ usr / local / redhawk / core / bin / update_project”,第56行     返回下一个(项目) NameError:未定义全局名称“next”

我很感激有关如何将1.8.4设备转换为1.9设备的建议。

1 个答案:

答案 0 :(得分:0)

根据您的错误消息“NameError:global name'next'未定义”以及update_project python脚本1.9.0版本的内容,我假设您运行的是低于2.6的python版本。下一个函数是在Python 2.6(http://docs.python.org/2/library/functions.html#next)中引入的python内置函数。这是升级脚本中的已知错误,因为它应该与Python 2.4以及Python 2.6(分别在CentOS 5和6中的默认python安装)兼容。要解决此问题,您可以修改位于$ OSSIEHOME / bin / update_project中的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”函数。

最后,您需要通过调用新实现的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