externen Prozess aufrufen mit kwargs Übergabe

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
HeinzBacker
User
Beiträge: 13
Registriert: Dienstag 10. März 2020, 20:20

Samstag 3. April 2021, 23:13

Hi,

in meinem .py möchte ich einen externen Prozess (kann wieder ein .py oder eine .exe sein) aufrufen und dabei Parameter übergeben - sinnvollerweise mit einem dict.

Mein Versuch:

Code: Alles auswählen

input = ['.\\extern.exe', {'key1':'value1', 'key2':'value2'}]
subprocess.call(input)
Leider klappt es so nicht, da das dict hier nicht ohne weiteres übergeben werden kann.

Gibt es denn Alternativen zu so einem Fall?

Danke!
nezzcarth
User
Beiträge: 1288
Registriert: Samstag 16. April 2011, 12:47

Samstag 3. April 2021, 23:20

Sollen das Umgebungsvariablen, oder Kommandozeilenparameter sein, oder was genau stellst du dir vor?
HeinzBacker
User
Beiträge: 13
Registriert: Dienstag 10. März 2020, 20:20

Sonntag 4. April 2021, 08:55

ich verstehe nicht ganz, was du fragst, aber es sind einfache Kommandozeilenparameter in Form eines Dict (Key: Value) , die ich dem Prozess übergeben will.
Sirius3
User
Beiträge: 14423
Registriert: Sonntag 21. Oktober 2012, 17:20

Sonntag 4. April 2021, 11:47

So eine exe-Datei erwartet ja Parameter in einem bestimmten Format. Wie sieht denn das aus?
Parameter kann man nur als Strings übergeben. Was möchtest du überhaupt machen?
HeinzBacker
User
Beiträge: 13
Registriert: Dienstag 10. März 2020, 20:20

Montag 5. April 2021, 08:13

Wenn ich das wie oben angegeben ausführe, wird das Dict nicht als Text übergeben, sondern es werden die Key-Elemente hintereinander als ein Wort übergeben (die Values werden verworfen):

argv[1:0] ==> "key1key2"

Was ich möchte ist:

argv[1:0] ==> "key1:value1 key2:value2"
Sirius3
User
Beiträge: 14423
Registriert: Sonntag 21. Oktober 2012, 17:20

Montag 5. April 2021, 08:52

argv[1:0] ist immer eine leere Liste. Kommandozeilenargumente werden üblicherweise in der Form --option=Wert übergeben. Und weiter schon geschrieben, die Frage: was erwartet denn das externe Programm? Daran solltest du dich orientieren.
Du hast auch immer noch nicht beschrieben, was das Problem ist, dass du lösen musst. Du schreibst immer nur, dass deine Lösung das (noch unbekannte Problem) nicht löst.
HeinzBacker
User
Beiträge: 13
Registriert: Dienstag 10. März 2020, 20:20

Montag 5. April 2021, 13:07

ich meine natürlich argv[1:]
Das externe Programm erwartet nichts definiertes...alles ist möglich. Dachte nur, ein Dict-Format (also Key, Doppelpunkt, Wert) ist eine gute Art und Weise. Aber
--option=Wert
kann ich mit auch vorstellen. Ist halt auf der einen Seite nicht so "einfach" wie ein Dict, was ich einfach nur übergeben könnte.
Aber danke, ich probier es mal so.
Benutzeravatar
__blackjack__
User
Beiträge: 8572
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Montag 5. April 2021, 16:25

@HeinzBacker: Wenn Du ein Wörterbuch hast mit Werten, die sich als JSON (de)serialisieren lassen, dann mach doch *das*. Besser als sich selbst irgendwas zu basteln.
“Dawn, n.: The time when men of reason go to bed.” — Ambrose Bierce, “The Devil's Dictionary”
Antworten