2017-06-19 1 views
0

Ich halte mich für Anfänger bei Python.Ich schreibe gerade Code und es funktioniert einwandfrei. Das Problem ist, dass eine große Anzahl von Aufrufen der Unterprozessbibliothek verwendet wird, um Linux Bash-Befehle einzubetten. So konnte ich einen 1000 Zeilen Code auf 80 Zeilen umschreiben. Hier einige meiner Code:Ist es angemessen, Code mit vielen Aufrufen zu Subprozess-Bibliothek von Python zu schreiben

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"]) 

Also, welche Probleme können könnte dieser Ansatz generieren? (Der Code funktioniert, aber ich bin immer noch nicht überzeugt)

+1

Wenn der größte Teil Ihres Skripts bash aufruft, könnte es an der Zeit sein, darüber nachzudenken, das Ganze in bash zu schreiben. – zondo

+0

Ich dachte darüber nach, aber ich brauche eine Menge von Python Functionalities especillay Aufrufe an bestimmte APIs –

Antwort

1

Dies ist eine Frage, die die Türen öffnen, um eigenwillige Antworten wirft, so ...

Die wichtigste Sache zu prüfen, ist: „es funktioniert? " Wenn ja, sollten Sie eine andere Frage stellen: "Wie kann ich es besser machen?"

Wäre es sinnvoll, 10 Bash-Aufrufe von Python zu machen? Oder um 10 Python-Aufrufe (mit python -m <your_API_here>) von Bash zu machen? Am Ende des Tages müssen Sie Ihre Anwendungsfälle berücksichtigen, und welcher Ansatz macht mehr Sinn. Werden Sie diese Software an Millionen von Benutzern verteilen? Muss dies plattformunabhängig sein? Und so weiter.


von Ihrem Code geht, wäre es eine Menge Code scheinen kann weiter mit Rohren komprimiert werden, wenn man sie mit bash implementieren ist. Wenn Sie bestimmte Python-APIs aufrufen möchten, können Sie ein Skript immer auf die gleiche Weise forkieren, wie Sie den Unterprozess jetzt aufrufen. Die Hauptfrage ist, ist es die Mühe wert. Sich einige der oben genannten Fragen zu stellen, kann Ihnen bei der Entscheidung helfen.

Verwandte Themen