使用python

时间:2017-06-19 10:43:28

标签: python subprocess

我认为自己是python的初学者。我目前正在编写代码并且它运行得非常好。 问题是使用大量的子进程库调用来嵌入linux bash命令。 这样我就可以将1000行代码重写为80行。 这是我的一些代码:

if not OCRized(a):
    p0=subprocess.check_call(["pdftk",a,"burst"])
    print "splitting Pdf was successful........."
    for i in range(len(pdf.pages)):
        if (i>8):
         nameBurst="pg_00"+str(i+1)+".pdf"
        else:
         nameBurst="pg_000"+str(i+1)+".pdf"

        nameJPG="converted-"+str(i)+".jpg"

        p1=subprocess.check_call(["convert","-density","300",nameBurst,"-depth","8",nameJPG])
        print "Conversion to jpg was successful....."
        nameHocr="converted-"+str(i)
        p=subprocess.check_call(["tesseract",nameJPG,nameHocr,"-l","eng","hocr"])
        print "tesseract did the job for the ",str(i+1),"page"
        name2="page"+str(i)+".pdf"
        p2=subprocess.check_call(["bash","-c","hocr-pdf .> reconstructed.pdf "])
        print " Reconstruction is complete"
else:
        p=subprocess.check_call(["tesseract",'1.png','f1',"-l","eng"])

那么这种方法可能产生什么问题呢? (代码有效,但我还是不相信)

1 个答案:

答案 0 :(得分:1)

这是一个问题,可以为那些自以为是的答案敞开大门,所以......

要考虑的主要问题是:“它有效吗?”如果是的话,你应该问的另一个问题是,“我怎样才能让它变得更好?”

从python进行10次bash调用是否有意义?或者从bash进行10次python调用(使用python -m <your_API_here>)?在一天结束时,您需要考虑您的用例,以及哪种方法更有意义。您打算将此软件分发给数百万用户吗?这是否需要与平台无关?等等。

通过你的代码,如果你用bash实现它们,你的代码似乎可以用管道进一步压缩。如果要调用某些python API,则始终可以像调用子进程一样分叉脚本。主要问题是,值得努力。问上面的一些问题可能有助于你做出决定。