我目前正在开发一个GNU Radio项目,我在xml部分遇到了一个问题。
我需要打开一个配置文件并读取它以获取GNU Radio的变量。
现在,我只有内置文件允许读取配置文件,但只有一次,在GNU Radio流程图的开头。当我在GNU Radio运行时在配置文件中更改它时,我想刷新我的变量。
这可能是一个特定的问题,因为它暗示了XML和GNU Radio,但我认为即使不知道GNU Radio,它也可以解决。
所以,它是:
<block>
<name>Variable Config1</name>
<key>variable_config1</key>
<import>import ConfigParser</import>
<var_make>self._$(id)_config = ConfigParser.ConfigParser()
self._$(id)_config.read($config_file)
try: $(id) = self._$(id)_config.$(type.get)($section, $option)
except: $(id) = $value
self.$(id) = $(id)</var_make>
<make></make>
<callback>self.set_$(id)($value)</callback>
<callback>self._$(id)_config = ConfigParser.ConfigParser()
self._$(id)_config.read($config_file)
if not self._$(id)_config.has_section($section):
self._$(id)_config.add_section($section)
self._$(id)_config.set($section, $option, str($writeback))
self._$(id)_config.write(open($config_file, 'w'))</callback>
<param>
<name>Default Value</name>
<key>value</key>
<value>0</value>
<type>$type</type>
</param>
<param>
<name>Type</name>
<key>type</key>
<value>real</value>
<type>enum</type>
<option>
<name>Float</name>
<key>real</key>
<opt>get:getfloat</opt>
</option>
<option>
<name>Int</name>
<key>int</key>
<opt>get:getint</opt>
</option>
<option>
<name>Bool</name>
<key>bool</key>
<opt>get:getboolean</opt>
</option>
<option>
<name>String</name>
<key>string</key>
<opt>get:get</opt>
</option>
</param>
<param>
<name>Config File</name>
<key>config_file</key>
<value>default</value>
<type>file_open</type>
</param>
<param>
<name>Section</name>
<key>section</key>
<value>main</value>
<type>string</type>
</param>
<param>
<name>Option</name>
<key>option</key>
<value>key</value>
<type>string</type>
</param>
<param>
<name>WriteBack</name>
<key>writeback</key>
<value>None</value>
<type>raw</type>
</param>
<doc>
This block represents a variable that can be read from a config file.
To save the value back into the config file: \
enter the name of another variable into the writeback param. \
When the other variable is changed at runtime, the config file will be re-written.
</doc>
</block>
老实说,我根本不懂XML,但我真的需要这样做。
即使我不懂XML,我也会在询问前做过一些研究,但我没有找到任何东西。
答案 0 :(得分:0)
你想要做的事情没有意义。这些XML文件在流程图甚至转换为python源代码之前很久就被读取了,并且与进一步的操作完全无关。从GRC流程图生成的GNU Radio python应用程序 nothing 与这些XML文件无关。
答案 1 :(得分:-1)
事实上,在gnuradio中有一个块可以执行此操作。 因此,如果有人想在流程图运行时使用python更改变量,请查找xmlrpc块