[Python-de] Re: Funktion ueberschreiben?

Ulli Horlacher <[email protected]> Sun, 4 Dec 2022 14:41:05 +0000 (UTC)
Newsgroups gmane.comp.python.general.german
Organization University of Stuttgart, FRG
Message-ID <[email protected]>
Peter J. Holzer <[email protected]> wrote:

>> Genau das reicht doch: es soll meine modifizierte time Library gefunden
>> und dann zur Laufzeit geladen werden.
> 
> Vielleicht, aber das war nicht Deine Frage.

Meine Frage war mehrteilig, inklusive der nach Alternativloesungen :-)


>> 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.

Nicht konkret genug. 

Im duplicity source code steht an mehreren Stellen:

from duplicity import dup_time


Angenommen mein modifiziertes dup_time.py liegt in
/opt/duply/lib/dup_time.py

Was muss dann in $PYTHONPATH stehen, damit das geladen wird.
Und was muss ich in /opt/duply/lib/dup_time.py schreiben um
/usr/lib/python3/dist-packages/duplicity/dup_time.py
zu laden?



> (Was für mich auch eher schleierhaft macht. wie du da ein Wrapper-Script
> unterbringen willst

Trivial: das steht irgendwo in $PATH weiter vorne.
So was hab ich schon oft gemacht bei anderen Sprachen.



> 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!

"foo" waere dann "/usr/bin/duplicity" ?
Aber da steht doch drin:
import time
was mir meine grad modifizierte time.asctime() Funktion wieder ueberschreibt?


>>> 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.

$HOME/bin, /var/tmp/bin, etc


-- 
Ullrich Horlacher              Server und Virtualisierung
Rechenzentrum TIK         
Universitaet Stuttgart         E-Mail: [email protected]
Allmandring 30a                Tel:    ++49-711-68565868
70569 Stuttgart (Germany)      WWW:    http://www.tik.uni-stuttgart.de/
_______________________________________________
python-de Mailingliste -- [email protected]
Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an [email protected]
https://mail.python.org/mailman3/lists/python-de.python.org/
Mitgliedsadresse: [email protected]