Seite 1 von 1

Das nächste Problem mit subprocess ...

Verfasst: Freitag 4. August 2017, 20:51
von drnicolas
Gerade wurde ein Problem mit dem AUfruf externer Programme gelöst, da klemmt es schon wieder.
Jetzt soll ocrmpdf aufgerufen werden.
Das funktionierte bislang so, dass aus einem bash-script heraus ocrmypdf aufgerufen wurde - ohne Probleme.

Jetzt wird versucht, dies aus einem Pythons-Skript zu tun - eben mit subprocess.call oder subprocess.chkouput.

Ich bekomme in dieser Zeile aber eine Fehlermeldung:
Fatal Python error: Py_initialize: Unable the locale encoding
Das ganze stammt anscheinend aus python2.7/encodings line 123

Die Meldung legt nahe, dass das aus Python 2.7 stammt. Vielleicht sollte mein Skript mit Python 3.x laufen? Ich habe aber keine Ahnung wie ich das in PyDev umstellen kann.

Re: Das nächste Problem mit subprocess ...

Verfasst: Freitag 4. August 2017, 21:29
von BlackJack
@drnicolas: Wie startest Du das genau und wie sieht die Ausgabe genau aus? Am besten 1:1 Kopie, nicht abtippen.

Und passiert das auch wenn Du das aus einer Shell heraus startest und nicht aus der IDE?

Re: Das nächste Problem mit subprocess ...

Verfasst: Sonntag 6. August 2017, 20:50
von drnicolas

Code: Alles auswählen

_cmdlist=['ocrmypdf', 
                '-d',
                 '-l', 'deu', 
                '--output-type', 'pdfa', 
                # '--pdfa-image-compression', 'jpeg',
                #'--rotate-pages', 
                '--verbose 2',
                #' --clean',
                # ' --skip-text',
                # '--author','Scanner-Automation', 
                # '--subject', 'automatisierte_Ueberarbeitung',
                target_removedpages, target_ocred]
    _ocrmypdf_str=' '.join(_cmdlist)
    log.debug('Aufruf ocrmypdf: %s',_ocrmypdf_str)
    rem=subprocess.Popen(_cmdlist, stdout=subprocess.PIP, stderr=subprocess.PIPE)
    stdout, stderr=rem.communicate()
    
    log.debug('ocrmypd: stdout: %s ',stdout )
    log.debug('stderr: %s', stderr)
    log.debug('returncode: % i', rem.returncode)
except subprocess.CalledProcessError as e:
    log.error('OCR-Prozess fehlgeschlagen. Abbruch (-5)')
    stdout, stderr=rem.communicate()
    log.error('Return-code: %i, %s',rem.returncode, stderr)
    log.error('stdout: %s', stdout)
    
    #logging.shutdown(f1)
    ProcessLogFile()

Mit diesem Code schlägt irgendwas fehl, aber ich bekomme keine genaue Fehlermeldung, wahrscheinlich weil das Objekt rem noch gar nicht erstellt ist.

Von der Kommandozeile kann ich das Skript laufen lassen, ohne dass irgendwas fehlschlägt.

ocrmypdf -d -l deu --output-type pdfa -v 2 /tmp/20170731_scan_215846.pdf /tmp/20170731_scan_215846_ocr.pdf

Das ist der AUfruf aus dem Skript.

Re: Das nächste Problem mit subprocess ...

Verfasst: Sonntag 6. August 2017, 21:34
von BlackJack
@drnicolas: Also bei dem Code sehe ich in Zeile 15 einen `AttributeError` weil es `subprocess.PIP` nicht gibt. :-)

Re: Das nächste Problem mit subprocess ...

Verfasst: Montag 7. August 2017, 15:30
von drnicolas
Vielen Dank! Ein Buchstabe hat es voran gebracht! Die Fehlermeldung kommt jetzt direkt von dem Tool und ist eine andere.

Nur ein einziger Buchstabe ! :oops:

Re: Das nächste Problem mit subprocess ...

Verfasst: Montag 7. August 2017, 18:29
von Sirius3
@drnicolas: Zeile 7 ist noch falsch, und dann wäre die Fehlermeldung des Programms auch noch ganz hilfreich.

Re: Das nächste Problem mit subprocess ...

Verfasst: Dienstag 8. August 2017, 07:38
von drnicolas
Danke. Das konnte ich beheben.
Es muss heissen: '--verbose', '2',