/usr/bin/hachoir-urwid is in python-hachoir-urwid 1.1-3.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | #!/usr/bin/python
from hachoir_core.cmd_line import (getHachoirOptions,
configureHachoir, unicodeFilename)
from hachoir_core.stream import InputStreamError, FileInputStream
from hachoir_core.i18n import _
from hachoir_parser import guessParser, HachoirParserList
from hachoir_urwid import exploreFieldSet
from hachoir_urwid.version import VERSION, WEBSITE
from optparse import OptionGroup, OptionParser
import hachoir_core
import sys
def displayVersion(*args):
print _("Hachoir urwid version %s") % VERSION
print _("Hachoir library version %s") % hachoir_core.__version__
print
print _("Website: %s") % WEBSITE
sys.exit(0)
def displayParserList(*args):
HachoirParserList().print_()
sys.exit(0)
def parseOptions():
parser = OptionParser(usage="%prog [options] filename")
common = OptionGroup(parser, "Urwid", _("Option of urwid explorer"))
common.add_option("--preload", help=_("Number of fields to preload at each read"),
type="int", action="store", default=15)
common.add_option("--path", help=_("Initial path to focus on"),
type="str", action="store", default=None)
common.add_option("--parser", help=_("Use the specified parser (use its identifier)"),
type="str", action="store", default=None)
common.add_option("--offset", help=_("Skip first bytes of input file"),
type="long", action="store", default=0)
common.add_option("--parser-list",help=_("List all parsers then exit"),
action="callback", callback=displayParserList)
common.add_option("--profiler", help=_("Run profiler"),
action="store_true", default=False)
common.add_option("--profile-display", help=_("Force update of the screen beetween each event"),
action="store_true", default=False)
common.add_option("--size", help=_("Maximum size of bytes of input file"),
type="long", action="store", default=None)
common.add_option("--hide-value", dest="display_value", help=_("Don't display value"),
action="store_false", default=True)
common.add_option("--hide-size", dest="display_size", help=_("Don't display size"),
action="store_false", default=True)
common.add_option("--version", help=_("Display version and exit"),
action="callback", callback=displayVersion)
parser.add_option_group(common)
hachoir = getHachoirOptions(parser)
parser.add_option_group(hachoir)
values, arguments = parser.parse_args()
if len(arguments) != 1:
parser.print_help()
sys.exit(1)
return values, arguments[0]
def profile(func, *args):
from hachoir_core.profiler import runProfiler
runProfiler(func, args)
def openParser(parser_id, filename, offset, size):
tags = []
if parser_id:
tags += [ ("id", parser_id), None ]
try:
stream = FileInputStream(unicodeFilename(filename), filename,
offset=offset, size=size, tags=tags)
except InputStreamError, err:
return None, _("Unable to open file: %s") % err
parser = guessParser(stream)
if not parser:
return None, _("Unable to parse file: %s") % filename
return parser, None
def main():
# Parser options and initialize Hachoir
values, filename = parseOptions()
configureHachoir(values)
# Open file and create parser
parser, err = openParser(values.parser, filename, values.offset, values.size)
if err:
print err
sys.exit(1)
# Explore file
if values.profiler:
ok = profile(exploreFieldSet, parser, values)
else:
exploreFieldSet(parser, values, {
"display_size": values.display_size,
"display_value": values.display_value,
})
if __name__ == "__main__":
main()
|