Каков «правильный» способ передать логическое значение в расширение Python C?

Это простой пример из документации Python (http://docs.python.org/exnding/exnding.html):

static PyObject *
spam_system(PyObject *self, PyObject *args)
{
    const char *command;
    int sts;

    if (!PyArg_ParseTuple(args, "s", &command))
        return NULL;
    sts = system(command);
    return Py_BuildValue("i", sts);
}

Если я хочу передать функции дополнительный логический параметр - что «правильный» способ сделать это?

Кажется, не существует опции типа bool для передачи в PyArg_ParseTuple (). Итак, я подумал о следующем:

  1. читать целое число и просто использовать значение (поскольку bool является подклассом int)
  2. вызывать PyBool_FromLong () для целого числа
  3. читать и объект и вызывать PyBool_Check () для проверки это bool
  4. , возможно, есть способ получить переменную любого типа и получить ее истинное значение (т.е. пустой массив будет ложным и т.д.), что обычно и делает функция python.

Что из этого предпочтительнее? Другие варианты?

23
задан shygon 16 February 2012 в 17:37
поделиться