Je tente de convertir un en-tête C en une bibliothèque Python en utilisant ctypes et ctypeslib. Je cours Python 2.7, sur OSX 10.6.4 (Snow Leopard).
Le fichier d'en-tête que je convertis est mcbcio32.h, situé dans /header/mcbcio32.h Je souhaite créer une sortie XML dans le même dossier, nommé mcbcio32.xml.Augmenter child_exception Errno 2
I exécuter h2xml.py (qui convertit l'en-tête de c dans un fichier XML enveloppé) à partir du dossier ctypeslib avec la commande suivante:
$ python h2xml.py /header/mcbcio32.h -o mcbcio32.xml -q -c
sortie:
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
D'après ce que je peux dire, trois scripts principaux sont appelés, h2xml.py, cparser.py, et enfin subprocess.py. Tous ces scripts sont écrits par des développeurs Python, et donc je suppose que l'erreur se situe quelque part dans la façon dont je lance la commande d'émission.
Code 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())
J'ai GCC-XML installé et le ctypeslib a été collé dans: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ (le chemin de ma bibliothèque locale Python)
Si des informations supplémentaires vous seraient utiles, faites-le moi savoir. Merci d'avance pour votre aide.