Hallo zusammen,
der Titel wirkt recht seltsam und vermutlich ist es auch recht einfach.
Mein Programm erstellt ein ziemlich langen String mit vielen Befehlen, welcher dann als .py Datei abgespeichert wird. Im Anschluss würde ich gern diese .py Datei einmal ausführen.
Ich stehe auf dem Schlauch, wie ich nun diese Datei ausführen kann. Import und über den Aufruf geht ja nicht, da es zur Laufzeit erst generiert wird.
Gibt es ein Modul, mit dem ich das Skript einfach aufrufen kann?
Gruß Tobias
Python in Python ausführen
Hallo,
ich kann dir dein Problem nicht lösen, mich würde aber der Hintergrund für das "Gewurschtel" interessieren. Warum machst du das so? Was für ein eigentliches Problem willst du damit lösen?
Eventuell gibt es eine Alternative dazu.
Grüße
Denniis
ich kann dir dein Problem nicht lösen, mich würde aber der Hintergrund für das "Gewurschtel" interessieren. Warum machst du das so? Was für ein eigentliches Problem willst du damit lösen?
Eventuell gibt es eine Alternative dazu.
Grüße
Denniis
"When I got the music, I got a place to go" [Rancid, 1993]
Also es geht um Netzberechnung und die Erstellung eines Netzes in PandaPower (https://pandapower.readthedocs.io/en/v2 ... s/bus.html)
Ich lese also die Datenbank des Quellsystems aus und forme es in das Zielformat um:
Wie man hier sieht weise ich die Knoten/den Bus einer Variale zu, welche ich später noch mal brauche (durch die Datenbankabfrage ist n[1] dieselbe ID wie bei l[2] oder eben l[3] - je nach dem):
Aus diesem Grund habe ich mir meine Variablen hier mit meiner ID erzeugt und zugewiesen, damit die spätere Zuweisung passt. Schließlich ist auch die Zuordnung durch das Quellsystem schon gegeben, welche ich einfach übernehmen möchte, ohne mir Fehler einzufangen. Sprich ich gehe einfach Tabelle für Tabelle durch und konvertiere die Objekte wenn man so möchte.
Zum Schluss wird das Gesamtkonstrukt dann in einer .py Datei gespeichert.
Anschließend möchte einfach eine Berechnung etc. durchführen.
Wenn ich den Code auch ohne Zwischenspeicherung über den String beispielsweise irgendwie ausführen kann, dann auch gerne.
Ich lese also die Datenbank des Quellsystems aus und forme es in das Zielformat um:
Code: Alles auswählen
panda_nodes = []
for n in nodes:
panda_nodes.append(f"bus{n[1]} = pp.create_bus(net, name = \"{n[0]}\", index = {n[1]}, vn_kv = {n[2]})
Code: Alles auswählen
panda_lines = []
for l in lines:
panda_lines.append(f"line{l[0]} = pp.create_line_from_parameters(net, name = \"{l[18]}\", from_bus = bus{l[2]}, to_bus = bus{l[3]})
Zum Schluss wird das Gesamtkonstrukt dann in einer .py Datei gespeichert.
Anschließend möchte einfach eine Berechnung etc. durchführen.
Wenn ich den Code auch ohne Zwischenspeicherung über den String beispielsweise irgendwie ausführen kann, dann auch gerne.
- __blackjack__
- User
- Beiträge: 13077
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@tobi45f: Nichts daran ist jetzt eine Erklärung warum Du dafür so was komisches machen willst und nicht einfach normalen Code schreibst statt Code in Zeichenketten die dann erst ausgeführt werden sollen.
`n` und `l` (was in vielen Schriftarten `1` und `I` und eventuell noch `|` sehr ähnlich sieht) sind keine guten Namen. Und die magischen Indexzahlen sind auch nicht so gut verständlich. Zumindest bei den `nodes` kann man die Bestandteile schon im Schleifenkopf auf sprechendere Namen aufteilen.
Edit (ungetestet):
`n` und `l` (was in vielen Schriftarten `1` und `I` und eventuell noch `|` sehr ähnlich sieht) sind keine guten Namen. Und die magischen Indexzahlen sind auch nicht so gut verständlich. Zumindest bei den `nodes` kann man die Bestandteile schon im Schleifenkopf auf sprechendere Namen aufteilen.
Edit (ungetestet):
Code: Alles auswählen
...
index_to_bus = {
bus_index: pp.create_bus(net, name=name, index=bus_index, vn_kv=vn_kv)
for name, bus_index, vn_kv in nodes
}
index_to_line = {}
for line in lines:
line_index, _, from_bus_index, to_bus_index = line[:4]
name = line[18]
index_to_line[line_index] = pp.create_line_from_parameters(
net,
name=name,
from_bus=index_to_bus[from_bus_index],
to_bus=index_to_bus[to_bus_index],
)
...
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- __blackjack__
- User
- Beiträge: 13077
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@tobi45f: Ich habe mir die API von der Bibliothek mal angeschaut und `index_to_bus` beziehungsweise die ganzen `bus*`-Namen in Deinem Code machen keinen Sinn, denn `create_bus()` gibt genau den `index` den man übergeben hat, auch wieder zurück. Der Rückgabewert macht nur Sinn wenn man das `index`-Argument nicht übergibt und die Funktion selbst einen neuen Wert aussuchen würde.
Code: Alles auswählen
net = pp.create_empty_network()
...
for name, bus_index, vn_kv in nodes:
pp.create_bus(net, vn_kv, name, bus_index)
index_to_line = {}
for line in lines:
line_index, _, from_bus_index, to_bus_index = line[:4]
name = line[18]
#
# FIXME Hier fehlen 4 obligatorische Argumente beim Aufruf!
#
# TODO Sollte hier auch wie bei `create_bus` ein Wert für `index`
# übergeben werden, dann ist auch hier das Wörterbuch
# (`index_to_line`) überflüssig weil Inhalt nicht sinnvoll.
#
index_to_line[line_index] = pp.create_line_from_parameters(
net, from_bus_index, to_bus_index, ..., ..., ..., ..., name
)
...
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Vielen Dank für deine Ausführliche Hilfe!
Ich musste es erstmal implementieren und testen, bevor ich antworte
Aber die Lösung über dictionaries funktioniert! Vielen Dank für den Hinweis!
Ah okay, dass create_bus auch nur den übergebenen Index zurück gibt, wusste ich auch nicht. Bei den Beispielen wurden tatsächlich Variablen zugewiesen und später wieder verwendet für from_bus/to_bus. Wenn ich nur den Index brauche, macht es das natürlich denkbar einfach!
Und ja, bei meinem Beispiel fehlen Argumente - ich hab nur einen Teil kopiert, da es "nur" um das Prinzip ging. Wer geht denn davon aus, dass ihr hier so tiefgründig recherchiert
Vielen Dank!
Ich musste es erstmal implementieren und testen, bevor ich antworte
Aber die Lösung über dictionaries funktioniert! Vielen Dank für den Hinweis!
Ah okay, dass create_bus auch nur den übergebenen Index zurück gibt, wusste ich auch nicht. Bei den Beispielen wurden tatsächlich Variablen zugewiesen und später wieder verwendet für from_bus/to_bus. Wenn ich nur den Index brauche, macht es das natürlich denkbar einfach!
Und ja, bei meinem Beispiel fehlen Argumente - ich hab nur einen Teil kopiert, da es "nur" um das Prinzip ging. Wer geht denn davon aus, dass ihr hier so tiefgründig recherchiert
Vielen Dank!
Tja, sie machen das, was viele der Fragensteller im Vorfeld nicht machen..... no offense intended.
Aber selbst ich Noob konnte schon so manche Frage durch den ersten gezeigten Link einer Google Suche recherchieren und beantworten.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png