psutil und pywinauto starten falsche exe im selben Pfad

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
TechnoFeather
User
Beiträge: 20
Registriert: Freitag 24. Juli 2009, 11:07

Hallo,

derzeit hänge ich an einem seltsamen Problem fest.

Ich möchte ein Programm (Windows) in einem Pfad ausführen, in dem noch zwei andere Programme liegen. Den genauen Pfad und auch Dateinamen definiere ich, es wird aber dennoch ein anderes Programm aus dem Pfad geöffnet. Erst wenn ich diese "falsche" Datei umbenenne, funktioniert mein Skript.

Dateistruktur im Ordner:
  • Anwendung 1A Client.exe
  • Anwendung 1A.exe
Dazu mein Code:

Code: Alles auswählen

print path
proc = psutil.Popen(path)
print proc
Python Shell:
C:\Program Files\..........\Anwendung 1A Client.exe
psutil.Popen(pid=8476, name=u'Anwendung.exe')
Wenn ich die andere Datei testweise Umbenenne in:
  • Anwendung 1A Client.exe
  • Anwendung1A.exe
Funktioniert mein Skript und "Anwendung 1A Client.exe" wird ausgeführt :shock: - Python Shell:
C:\Program Files\..........\Anwendung 1A Client.exe
psutil.Popen(pid=10620, name=u'Anwendung 1A Client.exe')
Auch wenn ich die eigentliche Datei umbenenne funktioniert mein Skript:
  • Anwendung1A Client.exe
  • Anwendung 1A.exe
C:\Program Files\..........\Anwendung1A Client.exe
psutil.Popen(pid=10620, name=u'Anwendung1A Client.exe')
ich kanns auch 1A und 2A nennen, hauptsache es gibt einen unterschied. Das hier funktioniert dabei auch nicht:
  • Anwendung 1A Client XYZ.exe
  • Anwendung 1A.exe

Ist doch zum verrück werden?! Gibt es dafür eine Lösung?
BlackJack

@TechnoFeather: Wenn Du bei `Popen()` *eine* Zeichenkette angibst, dann denkt `Popen()` Du willst da eine komplette Kommandozeile ausführen und zerlegt Dir die. Bei ``…/Anwendung 1A Client.exe`` wäre das dann das Programm ``…/Anwendung`` mit den beiden Argumenten ``1A`` und ``Client.exe``. Du musst da eine *Liste* übergeben mit dem Programm und einzelnen Argumenten. Wenn Du keine Argumente übergeben willst dann halt eine Liste mit dem Programm als einzigem Element. Also ``process = Popen([path])`` in Deinem Fall.
TechnoFeather
User
Beiträge: 20
Registriert: Freitag 24. Juli 2009, 11:07

Ah ok, Danke!

app = pywinauto.application.Application()
app.start_([path])

wollte nicht funkionieren, aber

psutil.Popen([path])

dafür schon. Danke. :)
BlackJack

@TechnoFeather: Die Methode von `pywinauto` ist ja auch etwas anderes als `psutils.Popen()`, da wird man wahrscheinlich eine Zeichenkette übergeben müssen. Müsstest Du halt in der Dokumentation von der `start()` nachsehen was das erwartet.
TechnoFeather
User
Beiträge: 20
Registriert: Freitag 24. Juli 2009, 11:07

habe auch "app.start_([path], 0, 0)" probiert, leider mit gleichem Ergebnis. Viel mehr steht leider auch nicht in der Doc: http://pywinauto.googlecode.com/hg-hist ... tion.start_
BlackJack

@TechnoFeather: Nun da steht nirgends das das erste Argument eine Liste sein sollte.
TechnoFeather
User
Beiträge: 20
Registriert: Freitag 24. Juli 2009, 11:07

Stimmt. "app.start_(path, 0, 0)" zeigt allerdings keine reaktion - die Konsole bleibt leer.
Antworten