Seite 1 von 1

Übernommene Argumente im Interpreter

Verfasst: Sonntag 14. Juli 2019, 16:30
von Pythagon
Hallo zusammen,

via VBA Shell-Objekt habe ich einen String an Python übergeben und im Python-Interpreter sehe ich auch die entsprechende Bezeichnung des Strings in der obersten Commandozeile sobald der Interpreter sich öffnet. Das Ganze sieht so aus:
'C:\Users\Herbert_Meisel\AppData\Local\Programs\Python\Python37-32\python.exe C:\Users\Public\Geldanlage\Pivots\Dividendenbewertung\Scraper.py', 'x'
Wenn ich das Ganze in VBA mit einem "& x" übergebe dann sieht es folgendermaßen aus:
'C:\Users\Herbert_Meisel\AppData\Local\Programs\Python\Python37-32\python.exe C:\Users\Public\Geldanlage\Pivots\Dividendenbewertung\Scraper.py', '&', 'x'
Nun bin ich mir nicht wirklich sicher ob die übergebene Variable bzw. das Argument "x" wirklich in dieser Zeile erscheinen sollte oder ob ich etwas falsch gemacht habe. Interessanterweise verschwinden diese Werte aus der Zeile sobald ich im Python Script den Aufruf "print(arglist)" deaktiviere.

Kann jemand daran erkennen ob ich auch die Werte für das Argument "x" erhalten haben müsste?

Re: Übernommene Argumente im Interpreter

Verfasst: Sonntag 14. Juli 2019, 16:44
von kbr
Im Argumentvektor

Code: Alles auswählen

import sys
print(sys.argv)
steht alles drin, was an den Aufruf des Python-Interpreters auf der Kommandozeile mit angegeben wurde.

Re: Übernommene Argumente im Interpreter

Verfasst: Sonntag 14. Juli 2019, 17:14
von Pythagon
kbr hat geschrieben: Sonntag 14. Juli 2019, 16:44 Im Argumentvektor

Code: Alles auswählen

import sys
print(sys.argv)
steht alles drin, was an den Aufruf des Python-Interpreters auf der Kommandozeile mit angegeben wurde.
Ich hätte noch erwähnen sollen, dass "arglist =sys.argv" ist. Durch print erscheinen die übergebenen Argumente zwar hinter dem Dateilink in der obersten Zeile des Interpreters sobald dieser sich öffnet aber die Werte der übergebenen Argumente sehe ich nicht. Ich möchte sicherstellen, dass die Werte übergeben wurden.

Re: Übernommene Argumente im Interpreter

Verfasst: Sonntag 14. Juli 2019, 17:23
von Pythagon
Mit der count Methode von sys.argv erhalte ich keinen Wert. Gehe ich richtig in der Annahme, dass tatsächlich kein Wert übergeben wurde oder müsste ich zumindest einen Wert von null angezeigt bekommen?

Code: Alles auswählen

import sys  

arglist = sys.argv # Übergebene Werte aus VBA

print(arglist)

txt = arglist.count

print(txt)

Re: Übernommene Argumente im Interpreter

Verfasst: Sonntag 14. Juli 2019, 17:30
von __deets__
Du musst count schon aufrufen, wenn du meinst, da waere etwas zu zaehlen. Allerdings vermute ich mal eher du suchst len(sys.argv) fuer die Laenge der uebergebenen Argumente.

Und das sollte *mindestens* 1 sein, denn python bzw. das Skript selbst ist das erste Argument. Erst danach kommen uebergebene Argumente. Wie du sehr leicht mit der Kommandozeile statt durch das ShellExecute zu gehen ueberpruefen kannst.

Re: Übernommene Argumente im Interpreter

Verfasst: Sonntag 14. Juli 2019, 17:43
von Pythagon
Len war die Methode, die ich gesucht hatte. Ich neige dazu diese beiden zu verwechseln. Besten Dank!

Nun, er zählt tatsächlich drei Argumente und damit wertet er auch das "&" als Argument. Nun stellt sich mir die Frage ob zum Argument "x" auch der entsprechende Wert (String) übergeben wurde.

Re: Übernommene Argumente im Interpreter

Verfasst: Sonntag 14. Juli 2019, 17:45
von __blackjack__
@Pythagon: Grunddatentypen haben in Namen eher nichts verlorenn. Wenn man `sys.argv` schon an einen anderen Namen binden möchte, dann vielleicht `arguments`. Ich sehe aber nicht wirklich einen Grund dafür das überhaupt zu tun.

Und wenn Du diese Liste mit `print()` ausgibst, dann siehst Du doch genau was da übergeben wurde und sofern das nicht zu viele Argumente sind, kann man doch an der Ausgabe der Liste auch recht leicht sehen wie viele Elemente die enthält‽

Re: Übernommene Argumente im Interpreter

Verfasst: Sonntag 14. Juli 2019, 17:48
von __deets__
Wenn in der ausgegebenen Liste nicht der von dir erwartete wert drin ist, dann ist da auch nichts übergeben worden. Was aber an deinem Aufruf und nicht an Python liegt.

Re: Übernommene Argumente im Interpreter

Verfasst: Sonntag 14. Juli 2019, 17:56
von Pythagon
__blackjack__ hat geschrieben: Sonntag 14. Juli 2019, 17:45 @Pythagon: Grunddatentypen haben in Namen eher nichts verlorenn. Wenn man `sys.argv` schon an einen anderen Namen binden möchte, dann vielleicht `arguments`. Ich sehe aber nicht wirklich einen Grund dafür das überhaupt zu tun.

Und wenn Du diese Liste mit `print()` ausgibst, dann siehst Du doch genau was da übergeben wurde und sofern das nicht zu viele Argumente sind, kann man doch an der Ausgabe der Liste auch recht leicht sehen wie viele Elemente die enthält‽
Weiter oben hatte ich ja erwähnt, dass ich mit print(sys.argv) zwar in der obersten Zeile des Interpreters hinter dem Link zum aufzurufenden Skript die Namen der übergebenen Argumente angezeigt bekomme (also '&' und 'x') aber den Wert für x bekomme ich nirgends angezeigt.

Re: Übernommene Argumente im Interpreter

Verfasst: Sonntag 14. Juli 2019, 17:57
von __deets__
Ich wiederhole mich nochmal: dann ist das nicht uebergeben worden, und der Grund dafuer liegt auf der aufrufenden Seite.

Re: Übernommene Argumente im Interpreter

Verfasst: Sonntag 14. Juli 2019, 17:59
von Pythagon
__deets__ hat geschrieben: Sonntag 14. Juli 2019, 17:48 Wenn in der ausgegebenen Liste nicht der von dir erwartete wert drin ist, dann ist da auch nichts übergeben worden. Was aber an deinem Aufruf und nicht an Python liegt.
Das Problem ist, ich bekomme gar keine Liste angezeigt. Da aber auf jeden Fall schonmal Namen übergeben wurden ( & bzw. x) müsste ich also wenn eine Liste erscheinen würde diese darin sehen, auch wenn keine Werte dazu übergeben worden sind.

Re: Übernommene Argumente im Interpreter

Verfasst: Sonntag 14. Juli 2019, 18:02
von Pythagon
__deets__ hat geschrieben: Sonntag 14. Juli 2019, 17:57 Ich wiederhole mich nochmal: dann ist das nicht uebergeben worden, und der Grund dafuer liegt auf der aufrufenden Seite.
Dann werde ich nochmal schauen was an meinem Code in VBA nicht stimmen könnte.

Merkwürdig ist halt trotzdem, dass ich durch print(sys.argv) bewirken kann, dass '&' und 'x' nicht mehr im Interpreter auftauchen.

Re: Übernommene Argumente im Interpreter

Verfasst: Sonntag 14. Juli 2019, 18:04
von Pythagon
... durch Herausnehmen von print(sys.argv) wollte ich sagen.

Re: Übernommene Argumente im Interpreter

Verfasst: Sonntag 14. Juli 2019, 18:09
von kbr
Du musst von aufrufender Seite nicht x übergeben, sondern den Wert von x. Sonst kommt in Python eben nur der Name des Bezeichners an.

Re: Übernommene Argumente im Interpreter

Verfasst: Sonntag 14. Juli 2019, 18:17
von Pythagon
kbr hat geschrieben: Sonntag 14. Juli 2019, 18:09 Du musst von aufrufender Seite nicht x übergeben, sondern den Wert von x. Sonst kommt in Python eben nur der Name des Bezeichners an.
ok, besten Dank! Dieser Sachverhalt ist dann eher ein Fall für das VBA Forum.