benchpdfs.py.svn-base

来自「SumatraPDF是一款小型开源的pdf阅读工具。虽然玲珑小巧(只有800多K」· SVN-BASE 代码 · 共 157 行

SVN-BASE
157
字号
#!/usr/bin/pythonimport sys, os, os.path, urllib2, gzip, bz2, traceback# Written by Krzysztof Kowalczyk (http://blog.kowalczyk.info)# This code is in public domain.## A regression testing script## Given a list of urls to PDF files, it downloads them and runs# pdftool draw -m $file-name# on each file. This allows catching crashes e.g. on linux:# python test/benchpdfs.py | grep Segmentation# will produce an output if pdftool crashed on any of the pdfs## Regression PDFs can be put anywhere. They can be gzipp'ed or bzip2'ed# to save the bandwidth (in which case url must end in .gz or .bz2)# # The script doesn't redownload the file if it has been downloaded before.## Missing files are ignored## By convetion names of PDF files are sha1 hash over the uncompressed content.# They have a nice property of being unique for each file.# To generate the name run sha1sum on an (uncompressed) pdf, rename# the file to a result of that + .pdf and optionally compress with gzip or bzip2pdfs_to_test = [    "http://darcs.kowalczyk.info/testpdfs/293bcd6b00e006d66fdc62ea436508f3ebb30219.pdf.gz"]local_pdfs_dir = os.path.expanduser("~/testpdfs")def dir_exists(path):    if os.path.exists(path):        return os.path.isdir(path)    return Falsedef file_exists(path):    if os.path.exists(path):        return os.path.isfile(path)    return False# make a directory if doesn't exist yet. def make_dir(path):    if not dir_exists(path): os.makedirs(path)def write_to_file(path, data):    fo = open(path, "wb")    fo.write(data)    fo.close()# Does HTTP GET or POST (if data != None). Returns body of the response or # None if there was an error# If username/pwd are provided, we assume it's for basic authenticationdef do_http(url, data = None, dump_exception=False):    body = None    try:        req = urllib2.Request(url, data)        resp = urllib2.urlopen(req)        body = resp.read()    except:        if dump_exception:            print "do_http failed",url            print '-'*60            traceback.print_exc(file=sys.stdout)            print '-'*60    return body# Tries to find root of the repository. Starts and pwd and goes up# until can't go anymore or finds "mupdf" directorydef find_repo_root():    curdir = os.getcwd()    prevdir = None    while curdir != prevdir:        if dir_exists(os.path.join(curdir, "mupdf")):            return curdir        prevdir = curdir        curdir = os.path.dirname(curdir)    return Nonedef find_pdftool():    root = find_repo_root()    if root == None:        print "Didn't find the root directory"        print "Current directory: '%s'" % os.getcwd()        sys.exit(1)    print root    # check build results for Jam and Makefile    for f in [os.path.join("obj-rel", "pdftool"), os.path.join("obj-dbg", "pdftool"),               os.path.join("build", "relase", "pdftool"), os.path.join("build", "debug", "pdftool")]:        path = os.path.join(root, f)        if file_exists(path):            return path    print "Didn't find pdftool. Did you build it?"    print "Root dir: '%s'" % root    sys.exit(1)def is_gzipped(filename): return filename.endswith(".gz")def is_bzip2ed(filename): return filename.endswith(".bz2")def uncompress_if_needed(filepath):    if is_gzipped(filepath):        finalpath = filepath[:-len(".gz")]        print "Uncompressing '%s' to '%s'" % (filepath, finalpath)        fin = gzip.open(filepath, "rb")        fout = open(finalpath, "wb")        data = fin.read()        fout.write(data)        fin.close()        fout.close()        os.remove(filepath)    elif is_bzip2ed(filepath):        finalpath = filepath[:-len(".bz2")]        print "Uncompressing '%s' to '%s'" % (filepath, finalpath)        fin = bz2.BZ2File(filepath, "r")        fout = open(finalpath, "wb")        data = fin.read()        fout.write(data)        fin.close()        fout.close()        os.remove(filepath)def pdfname_from_url(url): return url.split("/")[-1]def final_pdfname_from_url(url):    potentially_compressed = pdfname_from_url(url)    for suffix in [".gz", ".bz2"]:        if potentially_compressed.endswith(suffix):            return potentially_compressed[:-len(suffix)]    return potentially_compresseddef main():    print "Starting the test"    pdftool = find_pdftool() # make sure to abort early if pdftool doesn't exist    #print "pdftool: '%s'" % pdftool    make_dir(local_pdfs_dir)    for pdfurl in pdfs_to_test:        pdfname = pdfname_from_url(pdfurl)        local_pdf_path = os.path.join(local_pdfs_dir, pdfname)        final_pdfname = final_pdfname_from_url(pdfurl)        local_final_pdf_path = os.path.join(local_pdfs_dir, final_pdfname)        # Download the file if not already downloaded        if not os.path.exists(local_final_pdf_path):            print "Downloading pdf file '%s' as '%s'" % (pdfurl, local_pdf_path)            pdf_file_data = do_http(pdfurl)            if None == pdf_file_data:                print "Failed to download '%s'" % pdfurl                continue # don't stop the test just because of that            write_to_file(local_pdf_path, pdf_file_data)            uncompress_if_needed(local_pdf_path)        cmd = pdftool + " draw -m " + local_final_pdf_path        print "Running '%s'" % cmd        os.system(cmd)if __name__ == "__main__":    main()

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?