Seite 1 von 1

pyw soll via COM ein Programm starten

Verfasst: Montag 26. Mai 2008, 12:00
von Pü-Ton
Hi@all,

ich bin z.Z. daran ein bestehendes VBscript-Programm, dass ein Windowsprogramm startet, in python umzuschreien.
Bis jetzt habe ich auch die Gui un die Eingabezeilen hingebracht, und scheitere jetzt daran, das Windowsprogramm aufzurufen.
Dies geschieht über COM !!!

In Vbscript geht das so:

Code: Alles auswählen

Set TestCompleteApp = CreateObject("TestComplete.TestCompleteApplication")
  TestCompleteApp.Visible = True
  
  ' Obtains the integration object
  Set IntegrationObject = TestCompleteApp.Integration
  
  ' Opens the project
  IntegrationObject.OpenProjectSuite(PJSPath) 'Pfad unter dem die Projectsuit liegt, mit endung.pjs
  
  ' Checks whether the project was opened
  If Not IntegrationObject.IsProjectSuiteOpened Then
    MsgBox "The project suite was not opened."
    Exit Sub
  End If
  
  ' Starts the project run
  IntegrationObject.RunProject(MDSPath) 'Ist nur der Name des Projektes
Weiß jemand, wie ich das mit python realisieren kann?
Also vorallem das Arbeiten mit Com zum Starten einer Windows applikation?

Ich habe schon etwas über pythonCOM gelesen, bin jetzt allerding eher verwirrt statt schlau ... :cry:


Danke

Re: pyw soll via COM ein Programm starten

Verfasst: Montag 26. Mai 2008, 13:12
von gerold
Pü-Ton hat geschrieben:Also vorallem das Arbeiten mit Com zum Starten einer Windows applikation?
Hallo Pü-Ton!

In etwa so:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import win32com.client
import win32ui
import win32con

PJSPATH = "asdf"
MDSPATH = "asdf"


app = win32com.client.dynamic.Dispatch("TestComplete.TestCompleteApplication")
app.Visible = True``

integration = app.Integration # vielleich so: ``app.Integration()``
integration.OpenProjectSuite(PJSPATH)

if integration.IsProjectSuiteOpened: # vielleicht so: ``integration.IsProjectSuiteOpened()``
    integration.RunProject(MDSPATH)    
else
    msg = "The project suite was not opened."
    win32ui.MessageBox(msg, "Error", win32con.MB_OK)
mfg
Gerold
:-)

Verfasst: Montag 26. Mai 2008, 13:52
von Pü-Ton
Hey Gerold,
vielen Dank, dass sieht super aus.
Bin in diese Ecke, mit den ganzen imports, auch schon vorgedrungen...

Ich verwende eclipse zum editieren und bekomme nun aber folgende Fehlermeldung:




Traceback (most recent call last):
File "C:\Documents and Settings\Desktop\src\test.py", line 4, in <module>
import win32com.client
ImportError: No module named win32com.client



Brauch ich da noch ein plugin?
Wenn ich aus der Datei eine .pjw mache, müsste sie ja auch ohne elipse,etc laufen... -tut sie aber auch nicht...
hmmm...
what to do???

Verfasst: Montag 26. Mai 2008, 14:13
von gerold
Pü-Ton hat geschrieben:ImportError: No module named win32com.client
Hallo Pü-Ton!

http://sourceforge.net/project/showfile ... p_id=78018

mfg
Gerold
:-)

Verfasst: Montag 26. Mai 2008, 14:28
von Pü-Ton
Halt mich bitte nicht für total bescheuert, aber nach der Installation der win32 aus deinem Link, kommt sofort der nächste Fehler:

Traceback (most recent call last):
File "C:\Documents and Settings\Desktop\src\test.py", line 5, in <module>
import win32ui
ImportError: DLL load failed: The specified module could not be found.

Googeln bringt leider nichts...
Hast Du darauf auch eine Idee? Wär voll gut...

Verfasst: Montag 26. Mai 2008, 14:47
von gerold
Pü-Ton hat geschrieben:Traceback (most recent call last):
File "C:\Documents and Settings\Desktop\src\test.py", line 5, in <module>
import win32ui
ImportError: DLL load failed: The specified module could not be found.
Hallo Pü-Ton!

- Computer neu starten

- Noch mal installieren: http://downloads.sourceforge.net/pywin3 ... -py2.5.exe

- Computer neu starten

- START -> Python 2.5 -> "Python (commandline)" öffnen und ausprobieren:

Code: Alles auswählen

import win32ui
mfg
Gerold
:-)

Verfasst: Montag 26. Mai 2008, 14:54
von Pü-Ton
...bringt leider keine Veränderung.

Hab noch gefunden, dass die libdb42.dll, libeay32.dll und ssleay32.dll im Windows/System32/ Verzeichnis sein müssen. Das sind sie aber auch ... :(

Der Fehler wird mit der Python-IDEL sowie mit eclipse angezeigt !!!

Verfasst: Montag 26. Mai 2008, 15:17
von Pü-Ton
Ok, ich hab den Teil mit der win32ui einfach mal auskommentiert.
Jetzt erscheint ein neues Problem. Sorry, wenn ich hier so viel um Hilfe bitte...

Fehlermeldung:

Code: Alles auswählen

File "E:\eclipse\workspace\TestCompleteTS\src\TCTS.py", line 26, in run
    PJSpath = eingabe1.get(0, root.END)
  File "C:\Python25\lib\lib-tk\Tkinter.py", line 1721, in __getattr__
    return getattr(self.tk, attr)
AttributeError: END
Und der Code

Code: Alles auswählen

from Tkinter import*
from Tix import *
from tkFileDialog import askopenfilename
import win32com.client
#import win32ui
import win32con 

root=TK()

#...

def search_name1():
    sName1 = askopenfilename()
    if sName1: add_name1(sName1)     
def add_name1(sName1) : eingabe1.insert(END, sName1)

#...


PJSpath = eingabe1.get(0, root.END)

#...

    inte = app.Integration() 
    inte.OpenProjectSuite(PJSPATH)
und das dazugehörige Eingabefeld:

Code: Alles auswählen

#Buttons mit Beschriftung und Eingabezeile
PJSbutton = Button(rahmen, text="PJS", command=search_name1, width=8, height=1)#, command=self.ok_command)
PJSbutton.grid(row=1,column=2, pady=1, padx=1)
label1 = Label(rahmen, text="choose a Projectsuit", font=("Arial", 10), width=17)
label1.grid(row=1,column=1, pady=1, padx=5)
eingabe1 = Entry(rahmen, width=60)
eingabe1.grid(row=1, column=3, pady=1, padx=5)
Ich denke das deutet auf ein Formfehler hin, oder?
Bin leider noch etwas unbeholfen, was das debuggen angeht...

Verfasst: Montag 26. Mai 2008, 15:24
von gerold
Pü-Ton hat geschrieben:Der Fehler wird mit der Python-IDEL sowie mit eclipse angezeigt !!!
Hallo Pü-Ton!

Was die IDLE ausspuckt war nicht das was ich wissen wollte. Ich verlasse mich nicht auf die IDLE. Interessant wäre gewesen, was der ECHTE Python-Interpreter ausspuckt.

Dann brauchen wir noch mehr Infos!
- Betriebssystem
- Pfad zum Python-Interpreter:

Code: Alles auswählen

>>> import sys
>>> sys.exec_prefix
'J:\\Python25'
>>> sys.executable
'J:\\Python25\\pythonw.exe'
>>>

Code: Alles auswählen

>>> from pprint import pprint
>>> pprint(sys.path)
['',
 'J:\\Python25\\lib\\site-packages\\mechanize-0.1.6b-py2.5.egg',
 'J:\\Python25\\lib\\site-packages\\clientform-0.2.6-py2.5.egg',
 ...
 'J:\\Python25\\lib\\site-packages\\Pythonwin',
 'J:\\Python25\\lib\\site-packages\\wx-2.8-msw-unicode',
 'P:\\dev\\sw3api',
 'P:\\bcom-intern\\aida_tagesabschluss_tool',
 'P:\\dev\\sw3belis']
>>>
``Pythonwin`` muss im Pfad vorkommen. Oder poste einfach mal den ganzen ``sys.path`` von dir.

mfg
Gerold
:-)

Verfasst: Montag 26. Mai 2008, 15:29
von gerold
Hallo Pü-Ton!

Grundlegender Fehler! Du mischt GUI-Programmierung mit der Programmlogik. Teste zuerst mal ob du COM-Zugriff bekommst und vermische diesen Test nicht mit der Tkinter-GUI. Da weißt du ja nie, welches Problem woher stammt.

Teste COM NICHT in Eclypse. Teste den COM-Zugriff in einer DOS-Konsole und teste ihn ohne Tkinter.

mfg
Gerold
:-)

Verfasst: Montag 26. Mai 2008, 15:42
von Pü-Ton

Code: Alles auswählen

>>> import sys
>>> sys.exec_prefix
'C:\\Python25'
>>> sys.executable
'C:\\Python25\\python.exe'
>>>
>>> from pprint import pprint
>>> pprint(sys.path)
['',
 'C:\\WINDOWS\\system32\\python25.zip',
 'C:\\Python25\\DLLs',
 'C:\\Python25\\lib',
 'C:\\Python25\\lib\\plat-win',
 'C:\\Python25\\lib\\lib-tk',
 'C:\\Python25',
 'C:\\Python25\\lib\\site-packages',
 'C:\\Python25\\lib\\site-packages\\win32',
 'C:\\Python25\\lib\\site-packages\\win32\\lib',
 'C:\\Python25\\lib\\site-packages\\Pythonwin']
>>>

Ich hab import win32ui jetzt in der Command-Zeile ausgeführt. Fehlermeldung war, dass die MFC71.dll gefehlt hatte. Hab sie gedownloaded und installiert. Das Problem wäre also beseitigt :lol: Vielen Dank

Jetzt funzt soweit alles, auser das folgende Fehlermeldung kommt:

Code: Alles auswählen

  File "E:\KöglerT\eclipse\workspace\TestCompleteTS\src\TCTS.py", line 26, in run
    PJSpath = eingabe1.get(0, root.END)
  File "C:\Python25\lib\lib-tk\Tkinter.py", line 1721, in __getattr__
    return getattr(self.tk, attr)
AttributeError: END
siehe oben!!!

Verfasst: Montag 26. Mai 2008, 15:43
von Pü-Ton
wow, ok, da muss ich wohl erstmal langsam machen...
ok

Verfasst: Dienstag 27. Mai 2008, 09:14
von Pü-Ton
Hallo Gerold,

also ich hab jetzt die COM-Funktionalität mit der Command getestet. Soweit gehts also.
Du hattest geschrieben, dass ich GUI und Programmlogic vermische. Wie aber muss das denn nu aussehen, damit es nicht gemischt ist.
Sind das dann 2 unterschiedliche Files, wobei die Programmlogic die GUI aufruft oder so?

vielen Dank

Verfasst: Dienstag 27. Mai 2008, 10:47
von Leonidas
Pü-Ton hat geschrieben:wobei die Programmlogic die GUI aufruft oder so?
Nein, andersrum. Die Programmlogik sollte gar nicht wissen dass es eine GUI gibt oder welche das ist.