xml - чтение файла конфигурации несколько раз (для GNU Radio)

В настоящее время я работаю над проектом 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, я провел некоторое исследование, прежде чем спрашивать, и ничего не нашел.

2 ответа

То, что вы пытаетесь сделать, не имеет смысла. Эти XML-файлы действительно читаются задолго до того, как потоковый граф даже конвертируется в исходный код Python, и совершенно не имеют значения для дальнейшей работы. Приложение Python GNU Radio, сгенерированное из вашего потокового графа GRC, не имеет ничего общего с этими файлами XML.

На самом деле в gnuradio есть блок для этого. Итак, если кто-то хочет изменить переменную с помощью python во время работы потокового графа, ищите блок xmlrpc

Другие вопросы по тегам