On 2022-12-04 13:10, Ulli Horlacher <framstag@rus.uni-stuttgart.de> wrote:
Peter J. Holzer <hjp-usenet3@hjp.at> wrote:
Via environment Variable PERLLIB, analog zu LD_LIBRARY_PATH.
Beides beeinflusst nur, wo Libraries gesucht werden.
Genau das reicht doch: es soll meine modifizierte time Library gefunden und dann zur Laufzeit geladen werden.
Vielleicht, aber das war nicht Deine Frage.
Aber time zu ersetzen scheint mir sowieso keine zielführende Taktik zu sein. Asctime ist ja nicht die einzige Funktion aus diesem Modul, die verwendet wird. Wie ersetzt Du den Rest?
Gar nicht. Die bleibt gleich. Ich wollte time.py kopieren und da drin nur time.asctime() modifizieren. Da es das aber gar nicht als eigenes library-file gibt, ist diese Idee nicht umsetzbar. Sackgasse.
Wenn Du ein Modul ersetzen willst, dann eher duplicity.dup_time.
Da stecken halt noch viel mehr Funktionen drin.
12 Funktionen und eine Klasse. Das Modul »time« hat ungefähr das Doppelte. Und ein guter Teil davon ist notwendigerweise in C geschrieben. Das scheint mir jedenfalls deutlich komplexer zu sein, als das ziemlich übersichtliche dup_time.
Wenn es nun ein Ubuntu-Update davon gibt, kann es zu Inkompatibiltaeten kommen.
Für das hypothetische python.py gilt das genauso.
In Perl kann man folgendes machen: Ein Modul laden und danach nur eine Funktion nachtraeglich ersetzen. Geht so was auch mit Python?
Ja, wurde ja schon erklärt. Aber die Stelle, wo das trivial möglich wäre, willst Du ja nicht angreifen. (Was für mich auch eher schleierhaft macht. wie du da ein Wrapper-Script unterbringen willst: Würden nicht alle Argumente, die gegen eine Modifikation des Originalscripts sprechen auch gegen ein Wrapper-Script sprechen? Bzw. Wie stellst Du sicher, dass das Wrapper-Script aufgerufen wird, wenn es woanders liegt?)
Dann wuerde ich das original duplicity.dup_time laden und dann timetopretty() neu definieren. Kann ich dazu PYTHONPATH verwenden?
Nicht direkt. Wie in meinem vorigen Posting beschrieben, vielleicht indirekt, aber das ist mindestens so fragil. Wenn Du ein *anderes* Script aufrufen kannst, ist es wahrscheinlich am einfachsten, das Originalscript mittels exec aufzurufen: % cat foo #!/usr/bin/python3 import time timeinseconds = time.time() print(time.asctime(time.localtime(timeinseconds))) % ./foo Sun Dec 4 14:39:06 2022 % cat foo_wrapper #!/usr/bin/python3 import time def my_asctime(tm): return "Gotcha!" time.asctime = my_asctime with open("foo") as f: code = f.read() exec(code) % ./foo_wrapper Gotcha!
Wenn mich das Datumsformat ausreichend stören würde, würde ich das Debian-Paket patchen (ich gehe mal davon aus, dass Du das auf mehr als einem System haben willst). Das ist wahrscheinlich am einfachsten und saubersten.
Nicht machbar. Die Zielsysteme koennen auch Redhat sein und ich hab da auch keine root-Rechte.
Was mich wieder zu der Frage zurückführt, wie Du da ein Wrapper-Script installieren willst. hp