On 07/21/2010 05:29 PM, Holger brunck wrote: > >>> Something like the "file" utility for linux would be very helpfull. >>> >>> Any help is appreciated. > >> You're going to have to describe in detail what's in the file before >> anybody can help. > > We are creating inside our buildsystem for an embedded system a cram > filesystem > image. Later on inside our build process we have to check the endianness, > because it could be Little Endian or big endian (arm or ppc). > > The output of the "file" tool is for a little endian cramfs image: > <ourImage>: Linux Compressed ROM File System data, little endian size 1875968 > version #2 sorted_dirs CRC 0x8721dfc0, edition 0, 462 blocks, 10 files > > It would be possible to execute > ret = os.system("file <ourImage> | grep "little endian") > and evaluate the return code. > But I don't like to evaluate a piped system command. If there is an way > without > using the os.system command this would be great.
Files don't, as such, have a detectable endianess. 0x23 0x41 could mean either 0x4123 or 0x2341 - there's no way of knowing. The "file" utility also doensn't really know about endianess (well, maybe it does swap bytes here and there, but that's an implementation detail) - it just knows about file types. It knows what a little-endian cramfs image looks like, and what a big-endian cramfs image looks like. And as they're different, it can tell them apart. If you're only interested in a couple of file types, it shouldn't be too difficult to read the first few bytes/words with the struct module and apply your own heuristics. Open the files in question in a hex editor and try to figure out how to tell them apart! -- http://mail.python.org/mailman/listinfo/python-list