Path: csiph.com!weretis.net!feeder8.news.weretis.net!news.datentrampelpfad.de!thinkmo.de!news.uni-stuttgart.de!.POSTED!not-for-mail From: Ulli Horlacher Newsgroups: de.comp.lang.python Subject: Re: [Python-de] Re: Funktion ueberschreiben? Date: Sun, 4 Dec 2022 14:41:05 +0000 (UTC) Organization: University of Stuttgart, FRG Lines: 94 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 8bit X-Trace: news2.informatik.uni-stuttgart.de 1670164865 11721 129.69.1.129 (4 Dec 2022 14:41:05 GMT) X-Complaints-To: news@news.uni-stuttgart.de NNTP-Posting-Date: Sun, 4 Dec 2022 14:41:05 +0000 (UTC) User-Agent: tin/2.4.5-20200522 ("Millburn") (Linux/5.4.0-135-generic (x86_64)) Xref: csiph.com de.comp.lang.python:5906 Peter J. Holzer 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: horlacher@tik.uni-stuttgart.de Allmandring 30a Tel: ++49-711-68565868 70569 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/