Das nächste Problem mit subprocess ...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
drnicolas
User
Beiträge: 85
Registriert: Sonntag 24. Juli 2016, 10:32

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.
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?
drnicolas
User
Beiträge: 85
Registriert: Sonntag 24. Juli 2016, 10:32

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.
Zuletzt geändert von Anonymous am Sonntag 6. August 2017, 20:55, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@drnicolas: Also bei dem Code sehe ich in Zeile 15 einen `AttributeError` weil es `subprocess.PIP` nicht gibt. :-)
drnicolas
User
Beiträge: 85
Registriert: Sonntag 24. Juli 2016, 10:32

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:
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@drnicolas: Zeile 7 ist noch falsch, und dann wäre die Fehlermeldung des Programms auch noch ganz hilfreich.
drnicolas
User
Beiträge: 85
Registriert: Sonntag 24. Juli 2016, 10:32

Danke. Das konnte ich beheben.
Es muss heissen: '--verbose', '2',
Antworten