Raise child_exception Errno 2 - PullRequest
       5

Raise child_exception Errno 2

0 голосов
/ 30 сентября 2010

Я пытаюсь преобразовать заголовок C в библиотеку Python, используя ctypes и ctypeslib. Я использую Python 2.7 на OSX 10.6.4 (Snow Leopard).
Заголовочный файл, который я конвертирую, это mcbcio32.h, расположенный в /header/mcbcio32.h Я хочу создать вывод xml в той же папке с именем mcbcio32.xml.

Я запускаю h2xml.py (который преобразует заголовок c в упакованный xml-файл) из папки ctypeslib с помощью следующей команды:

$ python h2xml.py /header/mcbcio32.h -o mcbcio32.xml -q -c

Выход:

Traceback (most recent call last):
  File "h2xml.py", line 92, in <module>
    sys.exit(main())
  File "h2xml.py", line 86, in main
    compile_to_xml(argv)
  File "h2xml.py", line 79, in compile_to_xml
    parser.parse(files)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypeslib/codegen/cparser.py", line 306, in parse
    self.create_final_xml(include_files, types, None)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypeslib/codegen/cparser.py", line 265, in create_final_xml
    self.create_xml(source, xmlfile)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ctypeslib/codegen/cparser.py", line 97, in create_xml
    stdin=subprocess.PIPE)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 672, in __init__
    errread, errwrite)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1201, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

Из того, что я могу сказать, вызываются три основных скрипта: h2xml.py, cparser.py и, наконец, subprocess.py. Все эти сценарии написаны разработчиками Python, и, таким образом, я предполагаю, что ошибка лежит где-то в том, как я запускаю команду выдачи.

h2xml.py Код:

"""h2xml - convert C include file(s) into an xml file by running gccxml."""
import sys, os, ConfigParser
from ctypeslib.codegen import cparser
from optparse import OptionParser

def compile_to_xml(argv):
    def add_option(option, opt, value, parser):
        parser.values.gccxml_options.extend((opt, value))

    # Hm, should there be a way to disable the config file?
    # And then, this should be done AFTER the parameters are processed.
    config = ConfigParser.ConfigParser()
    try:
        config.read("h2xml.cfg")
    except ConfigParser.ParsingError, detail:
        print >> sys.stderr, detail
        return 1

    parser = OptionParser("usage: %prog includefile ... [options]")
    parser.add_option("-q", "--quiet",
                      dest="quiet",
                      action="store_true",
                      default=False)

    parser.add_option("-D",
                      type="string",
                      action="callback",
                      callback=add_option,
                      dest="gccxml_options",
                      help="macros to define",
                      metavar="NAME[=VALUE]",
                      default=[])

    parser.add_option("-U",
                      type="string",
                      action="callback",
                      callback=add_option,
                      help="macros to undefine",
                      metavar="NAME")

    parser.add_option("-I",
                      type="string",
                      action="callback",
                      callback=add_option,
                      dest="gccxml_options",
                      help="additional include directories",
                      metavar="DIRECTORY")

    parser.add_option("-o",
                      dest="xmlfile",
                      help="XML output filename",
                      default=None)

    parser.add_option("-c", "--cpp-symbols",
                      dest="cpp_symbols",
                      action="store_true",
                      help="try to find #define symbols - this may give compiler errors, " \
                      "so it's off by default.",
                      default=False)

    parser.add_option("-k",
                      dest="keep_temporary_files",
                      action="store_true",
                      help="don't delete the temporary files created "\
                      "(useful for finding problems)",
                      default=False)

    options, files = parser.parse_args(argv[1:])

    if not files:
        print "Error: no files to process"
        print >> sys.stderr, __doc__
        return 1

    options.flags = options.gccxml_options
    options.verbose = not options.quiet

    parser = cparser.IncludeParser(options)
    parser.parse(files)

def main(argv=None):
    if argv is None:
        argv = sys.argv

    try:
        compile_to_xml(argv)
    except cparser.CompilerError, detail:
        print >> sys.stderr, "CompilerError:", detail
        return 1

if __name__ == "__main__":
    sys.exit(main())

У меня установлен GCC-XML, и ctypeslib был вставлен в: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ (мой локальный путь к библиотеке Python)

Если какая-либо дополнительная информация будет полезна, пожалуйста, дайте мне знать. Заранее благодарю за любую помощь.

1 Ответ

1 голос
/ 22 октября 2010

Проблема была с установкой gcc-xml. Убедитесь, что при установке gcc-xml также установлена ​​функция cmake (cmake.org). Правильное использование cmake в папке gcc install решило все проблемы с каталогами, с которыми я столкнулся.

...