Ich habe eine Konfigurationsdatei für eine Anwendung in Form einer Python-Datei mit einem dict und ich führe eine AWS Lambda-Funktion, um diese Conf-Datei von S3 zu bekommen, Ändere drei Variablen darin und schiebe dann eine Kopie zurück nach S3. Gibt es einen einfachen Weg, dies zu tun? Ein Mitarbeiter sagte, er solle Jinja Templating ausprobieren, aber das scheint nur auf HTML-Dateien beschränkt zu sein.Bearbeiten von Parametern in einer Python-Datei aus einer anderen Python-Datei
Dank
Ein Beispiel für die Datei Python Config ist unten. Ich brauche das "Alpha" und "Zyklen" Variablen
import zutil
alpha = 2.13
cycles = 100
def my_transform(x, y, z):
v = [x, y, z]
v = zutil.rotate_vector(v, alpha, 0.0)
return {'v1': v[0], 'v2': v[1], 'v3': v[2]}
parameters = {
# units for dimensional quantities
'units': 'SI',
# reference state
'reference': 'IC_1',
'time marching': {
'unsteady': {
'total time': 1.0,
'time step': 1.0,
'order': 'second',
},
'scheme': {
'name': 'lu-sgs',
'stage': 1,
#'name' : 'runge kutta',
#'stage': 5,
},
'lu-sgs': {
'Number Of SGS Cycles': 8,
'Min CFL': 0.1,
'Max CFL': 5.0,
'Include Backward Sweep': True,
'Include Relaxation': True,
'Jacobian Update Frequency': 1,
'Jacobian Epsilon': 1.0e-08,
'CFL growth': 1.05,
'Use Rusanov Flux For Jacobian': 'true',
'Finite Difference Jacobian': 'false',
},
'multigrid': 10,
'cfl': 2.5,
'cfl transport': 2.5 * 0.5,
'ramp': {'initial': 1.0, 'growth': 1.1},
'cycles': cycles,
},
'equations': 'RANS',
'RANS': {
'order': 'euler_second',
'limiter': 'vanalbada',
'precondition': 'true',
'turbulence': {
'model': 'sst',
},
},
'material': 'air',
'air': {
'gamma': 1.4,
'gas constant': 287.0,
'Sutherlands const': 110.4,
'Prandtl No': 0.72,
'Turbulent Prandtl No': 0.9,
},
'IC_1': {
'temperature': 310.928,
'pressure': 101325.0,
'alpha': alpha, # User defined variable used for post processing
'V': {
'vector': zutil.vector_from_angle(alpha, 0.0),
'Mach': 0.85,
},
'Reynolds No': 5.0e6,
'Reference Length': 275.8,
'turbulence intensity': 1.e-4,
'eddy viscosity ratio': 0.1,
},
'BC_1': {
'ref': 7,
'type': 'symmetry',
},
'BC_2': {
'ref': 3,
'type': 'wall',
'kind': 'noslip',
},
'BC_3': {
'ref': 9,
'type': 'farfield',
'condition': 'IC_1',
'kind': 'riemann',
},
'write output': {
'format': 'vtk',
'surface variables': ['V', 'p', 'T', 'rho', 'walldist', 'yplus', 'mach', 'cp', 'eddy', 'pressureforce', 'frictionforce'],
'volume variables': ['V', 'p', 'T', 'rho', 'walldist', 'mach', 'cp', 'eddy'],
'frequency': 500,
},
'report': {
'frequency': 10,
'forces': {
'FR_1': {
'name': 'wall',
'zone': [9, 10, 11, 12, 13],
'transform': my_transform,
'reference area': 594720.0 * 0.5, # half model area # half model area # half model area
},
},
},
}
Jinja ist eine Vorlagenbibliothek und es ist sicherlich nicht nur auf HTML beschränkt. Aber ich bin mir nicht sicher, warum Sie eine Vorlage in erster Linie benötigen, wenn alles, was Sie lesen, reines Python-Diktat aus einer Python-Datei ist. Obwohl es für mich eine seltsame Art ist, mit confs umzugehen. Warum versuchen Sie nicht, eine conf-Datei in YAML oder JSON zu haben und auf diese Weise einfach zu lesen, zu manipulieren und zurück zu S3 zu schreiben. [Hier] (http://docs.aws.amazon.com/lambda/latest/dg/with-s3.html) ist ein Tutorial, um mit AWS lambda auf Dateien von/nach S3 zuzugreifen. – SRC
@SRC, Die Anwendung läuft die Python-Datei als das Format der Konfig, ich werde ein Beispiel in das OP werfen. Ich nehme an, ich könnte das .py lesen, das dict in eine JSON-Datei schreiben, diese verarbeiten und dann in eine andere Python-Datei zurückgeben. Was das Lesen von S3 angeht, habe ich das schon funktioniert. – Lewiky
Obwohl dies eine schreckliche und schlechte Lösung ist, empfehle ich dringend, dass Sie Ihren Code/Ihre Architektur überprüfen, damit Sie diese Lösung nicht verwenden müssen, aber wenn Sie eine Zeichenfolge (oder eine Datei mit wenigen Zeilen) haben und diese ausführen möchten Ein Python-Code kann dann mit [eval] (https://docs.python.org/3/library/functions.html#eval) oder [exec] (https://docs.python.org/3/library/ functions.html # exec) – SRC