Seite 1 von 1

Windows 7 Problem mit subprocess.Popen Python 3.3

Verfasst: Mittwoch 10. April 2013, 09:32
von mcdaniels
Hallo,
ich versuche heute schon länger, auf folgenden Fehler drauf zu kommen:

Code: Alles auswählen

process = subprocess.Popen(['dir'], stdout=subprocess.PIPE)
Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    process = subprocess.Popen(['dir'], stdout=subprocess.PIPE)
  File "C:\Python33\lib\subprocess.py", line 818, in __init__
    restore_signals, start_new_session)
  File "C:\Python33\lib\subprocess.py", line 1096, in _execute_child
    raise WindowsError(*e.args)
FileNotFoundError: [WinError 2] Das System kann die angegebene Datei nicht finden
Hat jemand einen Tip für mich?

Danke!

Re: Windows 7 Problem mit subprocess.Popen Python 3.3

Verfasst: Mittwoch 10. April 2013, 09:53
von BlackJack
@mcdaniels: Es gibt kein Programm mit dem Namen ``dir``. Das ist ein eingebauter Befehl in der Shell. Was willst Du denn *eigentlich* machen? Denn für das Auflisten von Dateinamen (und Metadaten) kann man auch das `os`-Modul mit `os.listdir()` und `os.stat()` verwenden.

Re: Windows 7 Problem mit subprocess.Popen Python 3.3

Verfasst: Mittwoch 10. April 2013, 10:05
von mcdaniels
Servus BlackJack:
Das Problem geht eigentlich von folgendem Programm aus. Du dürftest es u.U noch kennen, denn du warst damals so nett mich auf den richtigen Weg zu bringen:
(das mit dem 'dir" war dafür gedacht, um die Sache abzukürzen).

Code: Alles auswählen

import os
from glob import glob
from subprocess import PIPE, Popen


def main():
    for pdf_filename in glob('*.pdf'):
        target_path = os.path.join(
            'sig-pdf', os.path.splitext(pdf_filename)[0] + '_sig.pdf'
           )
        print (pdf_filename, '->', target_path)
    
        
        process = Popen(
            [
                'java',
                '-jar', 'PortableSigner.jar',
                '-b', 'de',
                '-c', 'Dieses Dokument wurde signiert.',
                '-i', 'Bildmarke.jpg',
                '-n',
                '-t', pdf_filename,
                '-o', target_path,
                '-s', 'zert.key',
                '-p', 'password'
            ]
            ,stdout=PIPE
        )
        output, _ = process.communicate()
        return_code = process.wait()


if __name__ == '__main__':
    main()
Fehler:
Traceback (most recent call last):
File "C:\Python33\lib\subprocess.py", line 1090, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] Das System kann die angegebene Datei nicht finde
n

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\user\Desktop\Signieren\sig.py", line 40, in <module>
main()
File "C:\Users\user\Desktop\Signieren\sig.py", line 28, in main
,stdout=PIPE
File "C:\Python33\lib\subprocess.py", line 818, in __init__
restore_signals, start_new_session)
File "C:\Python33\lib\subprocess.py", line 1096, in _execute_child
raise WindowsError(*e.args)
FileNotFoundError: [WinError 2] Das System kann die angegebene Datei nicht finde
n

Re: Windows 7 Problem mit subprocess.Popen Python 3.3

Verfasst: Mittwoch 10. April 2013, 10:35
von BlackJack
@mcdaniels: Offenbar liegt das ``java``-Programm nicht im %PATH% und kann deshalb nicht gefunden werden.

Re: Windows 7 Problem mit subprocess.Popen Python 3.3

Verfasst: Mittwoch 10. April 2013, 10:54
von mcdaniels
Hallo,
das hatte ich auch schon vermutet. Leider ist es das nicht, denn java ist im Path und ist von "überall" im Dateisystem aufrufbar.

Der Knackpunkt ist also ein Problem beim Aufruf von java.exe, dann werd ich mal weiter suchen... unter Windows XP läuft die Sache übrigens.

LG
Daniel

Re: Windows 7 Problem mit subprocess.Popen Python 3.3

Verfasst: Mittwoch 10. April 2013, 11:13
von BlackJack
@mcdaniels: Ist Java ganz sicher im Path von dem Benutzer der das ausführt? Funktioniert es wenn Du den Pfad von der ``java.exe`` komplett angibst?

Re: Windows 7 Problem mit subprocess.Popen Python 3.3

Verfasst: Mittwoch 10. April 2013, 11:19
von mcdaniels
Hallo,
ja in den Umgebungsvariablen des Benutzers, der das Pythonscript startet ist der Pfad enthalten:

Code: Alles auswählen

C:\Program Files\Java\jre7\bin
Wäre das dann u.a. so aufzurufen (Auszug):

Code: Alles auswählen

 process = Popen(
            [
                'C:\\Program Files\\Java\\jre7\\bin\\java.exe',
Edit (auch so mag es mich nicht) - selber Fehler:

Code: Alles auswählen

 process = Popen(
            [
                'C:\Program Files\Java\jre7\bin\java.exe',
Edit2: Ich werd das jetzt noch auf anderen Maschinen testen und mich dann wieder melden.

Re: Windows 7 Problem mit subprocess.Popen Python 3.3

Verfasst: Mittwoch 10. April 2013, 12:35
von mcdaniels
Hallo,
so wie es scheint gibt es bei Systemen ein Problem, bei denen auch vorhergehende Javaversionen installiert sind. (Java macht das ja ganz toll und deinstalliert bei einem Update die Vorversion nicht). Nun habe ich alle Javaversionen deinstalliert und danach ausschließlich die neue Version installiert.
Pfad ist allerdings der gleiche geblieben und es wurde auch vor der Installation die richtige (aktuellste) Javaversion aufgerufen (sagte zumindest java -version)

Es läuft jetzt wieder.

Allerdings verstehe ich nicht, warum man das Java-Programm (PortableSigner.jar) auch ohne die erwähnte Aktion problemlos durch Doppelklick starten konnte + die java.exe von überall (jedem Verzeichnis aus) aufrufbar war. (Pfad war also korrekt)

Mysterien von Oracle Java :-(

Sorry, dass ich das Python-Forum damit behelligt habe.

Danke!