Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1700to1704
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

WShell schließt sofort nach Ausführung

WShell schließt sofort nach Ausführung
14.07.2019 01:21:26
Marc
Hallo zusammen,
ich möchte mit VBA ein Python Skript ausführen über eine Shell. Dabei soll zunächst Python.exe gestartet werden und dann das Python Skript indem der eigentliche Code steht.
Doch die Shell geht nur kurz auf und schließt sich sofort wieder ohne das noch irgendetwas _
geschieht. Das Python Skript wird nicht ausgeführt. Es würde eine Datei erstellen und ich weiß, _
dass es zuverlässig läuft. Von daher kann ich sicher sagen, dass es nicht ausgeführt wird.
Sub RunPython()
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
wsh.Run "C:\Users\Herbert_Meisel\AppData\Local\Programs\Python\Python37-32\python.exe C:\Users\ _
Public\Geldanlage & Börse\Pivot Tabellen & Auswertungen\Dividendenbewertung\DivTool 1.5 - CSV Scraper.py & x"
End Sub
Was kann ich tun damit das Python Skript ausgeführt wird?

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: WShell schließt sofort nach Ausführung
14.07.2019 07:35:32
ChrisL
Hi Marc
Die Dateiendung py & x ist komisch.
..pyx"
..py"
..py" & "x"
wenn es eine String-Variable wäre
..py" & x
cu
Chris
AW: WShell schließt sofort nach Ausführung
14.07.2019 09:24:08
Marc
Hallo Chris,
sorry, ich hatte das Argument x nicht mit rausgenommen für den Thread. x ist ein String. Aber auch wenn ich diesen entsprechend Deiner Vorgabe angebe in der Zeile ändert sich nichts am Ergebnis. Die Shell schließt ohne den Python Code auszuführen, aber auch ohne Fehlermeldung.
Sub getsoup()
Dim x As String
x = "Hallo Welt!"
CreateObject("WScript.Shell").Run "C:\Users\Herbert_Meisel\AppData\Local\Programs\Python\ _
Python37-32\python.exe C:\Users\Public\Geldanlage & Börse\Pivot Tabellen & Auswertungen\Dividendenbewertung\DivTool 1.5 - CSV Scraper.py" & x, 1, True
MsgBox "ende"
End Sub

Anzeige
AW: WShell schließt sofort nach Ausführung
14.07.2019 11:04:59
Marc
Update:
Wenn ich den Code folgendermaßen ausführe dann öffnet sich schonmal die Eingabeaufforderung von Python(ich nehme an, dass diese die Shell darstellt), wo dann eigentlich automatisch der Pfad zum auszuführenden Skript eingefügt werden müsste aber das passiert leider nicht:

Sub getsoup()
Dim x As String
x = "Hallo Welt!"
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
wsh.Run "C:\Users\Herbert_Meisel\AppData\Local\Programs\Python\Python37-32\python.exe"
End Sub


Meine Syntax beim vorherigen Aufruf scheint nicht korrekt zu sein. Weiß jemand wie diese aussehen muss damit der Pfad zum Pythonskript eingefügt und ausgeführt wird?
Alternativ könnte man das Ganze vielleicht auch mit einem zweiten Aufruf machen aber ich weiß nicht mit welcher Methode der Shell ich dabei arbeiten muss.
Anzeige
AW: WShell schließt sofort nach Ausführung
14.07.2019 11:26:38
Marc
Update:
Nun habe ich es versucht indem ich für die Python Eingabeaufforderung ein weiteres Objekt erstelle (PythonShell) um mit diesem über einen separaten Aufruf das Python Skript auszuführen:

Sub getsoup()
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim PythonShell As Object
Set PythonShell = wsh.Run("C:\Users\Herbert_Meisel\AppData\Local\Programs\Python\Python37-32\ _
python.exe")
PythonShell.Exec "C:\Users\Public\Geldanlage & Börse\Pivot Tabellen & Auswertungen\ _
Dividendenbewertung\DivTool 1.5 - CSV Scraper.py"
End Sub

Als Fehlermeldung erhalte ich "Objekt erforderlich", bezogen auf die Codezeile in der ich das Objekt instanzieren möchte.
Hat irgendwer einen Lösungsansatz wie ich eine Commandozeile in die Python Eingabeaufforderung bekomme und diese ausführen kann?
Anzeige
AW: WShell schließt sofort nach Ausführung
14.07.2019 12:22:16
onur
Es KÖNNTE an den Leerzeichen im Namen des Scripts liegen.
AW: WShell schließt sofort nach Ausführung
14.07.2019 12:52:31
Marc
Hallo Onur,
lange nicht gelesen. ;)
Es waren tatsächlich die Leerzeichen. Jetzt läuft´s.
Vielen Dank für den guten Tipp!
AW: WShell schließt sofort nach Ausführung
14.07.2019 13:04:11
Marc
Zum Abschluss nochmal den korrekten Code, denn die Übergabe der Argumente erfolgt doch innerhalb der Gänsefüßchen:
Sub getsoup()
Dim x As String
x = "Hallo Welt!"
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
wsh.Run "C:\Users\Herbert_Meisel\AppData\Local\Programs\Python\Python37-32\python.exe C:\Users\ _
Public\Geldanlage\Pivots\Dividendenbewertung\Scraper.py & x", 1, True
End Sub

Anzeige
AW: WShell schließt sofort nach Ausführung
14.07.2019 13:05:18
onur
Die meisten Command-Line-Interpreter interpretieren Leerzeichen als Beginn eines neuen Befehls bzw Start der Parameter.
Abgesehen davon sollte man prinzipiell Leerzeichen in Namen vermeiden, bringen in vielen Fällen Probleme mit sich.
AW: WShell schließt sofort nach Ausführung
15.07.2019 23:36:11
Marc
Der vorherige Code überträgt nur den Bezeichner aber nicht den Wert der Variable, deshalb im Folgenden nochmal die korrekte Variante um den Wert einer Variable (in diesem Fall String) zu übergeben:
Sub ArgumenteÜbergeben()
Dim x As String
x = "Hallo Welt!"
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
wsh.Run ("C:\Users\Herbert_Meisel\AppData\Local\Programs\Python\Python37-32\python.exe C:\Users\ _
Public\Geldanlage\Pivots\Dividendenbewertung\Scraper.py '" & x & "'")
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige