[Python-de] Re: Funktion ueberschreiben?

Ulli Horlacher <[email protected]> Mon, 5 Dec 2022 08:24:37 +0000 (UTC)
Newsgroups gmane.comp.python.general.german
Organization University of Stuttgart, FRG
Message-ID <[email protected]>
Ulli Horlacher <[email protected]> wrote:

> --- Start running command LIST at 08:57:10.534 ---
> Traceback (innermost last):
>   File "<string>", line 106, in <module>
>   File "<string>", line 92, in with_tempdir
>   File "/usr/lib/python3/dist-packages/duplicity/dup_main.py", line 1538, in main
>     do_backup(action)
>   File "/usr/lib/python3/dist-packages/duplicity/dup_main.py", line 1558, in do_backup
>     col_stats = dup_collections.CollectionsStatus(globals.backend,
>   File "/usr/lib/python3/dist-packages/duplicity/dup_collections.py", line 744, in set_values
>     self.get_backup_chains(partials + backend_filename_list)
>   File "/usr/lib/python3/dist-packages/duplicity/dup_collections.py", line 896, in get_backup_chains
>     add_to_chains(s)
>   File "/usr/lib/python3/dist-packages/duplicity/dup_collections.py", line 884, in add_to_chains
>     log.Debug(_(u"Found backup chain %s") % (new_chain.short_desc()))
>   File "/usr/lib/python3/dist-packages/duplicity/dup_collections.py", line 408, in short_desc
>     return u"[%s]-[%s]" % (dup_time.timetopretty(self.start_time),
>   File "/usr/lib/python3/dist-packages/duplicity/dup_time.py", line 169, in timetopretty
>     return time.asctime(time.localtime(timeinseconds))
>   File "/opt/s3tik/bin/duplicity", line 6, in isodate
>     return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(timeinseconds))
>  TypeError: an integer is required (got type time.struct_time)
> 
> 08:57:10.886 Task 'LIST' failed with exit code '30'.
> --- Finished state FAILED 'code 30' at 08:57:10.886 - Runtime 00:00:00.351 ---
> 
> root@obertux:/opt/s3tik/bin# cat duplicity
> #!/usr/bin/python3
> 
> import time
> 
> def isodate(timeinseconds):
>   return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(timeinseconds))
> 
> time.asctime = isodate;
> 
> with open("/usr/bin/duplicity") as duplicity:
>     code = duplicity.read()
>     exec(code)

Habs nun geaendert zu:

root@obertux:/opt/s3tik/bin# cat duplicity
#!/usr/bin/python3

from duplicity import dup_time

def isodate(timeinseconds):
  return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(timeinseconds))

dup_time.timetopretty = isodate;

with open("/usr/bin/duplicity") as duplicity:
    code = duplicity.read()
    exec(code)


Ich definiere also nicht time.asctime() um, sondern dup_time.timetopretty()
Ist eh besser.
Und DAMIT funktioniert es:

root@obertux:/opt/s3tik/bin# duply root list | tail 
2021-01-20 17:55:59 server/tacitus
2021-01-20 17:55:59 server/unifex
2021-01-20 17:56:00 server/zentux
2021-01-20 17:56:00 server/zoo
2022-12-03 06:57:02 tmp
2022-12-03 09:43:51 tmp/.zz
2015-04-28 15:08:50 vcli
2013-09-11 17:02:36 vminfo_example
2013-06-24 13:33:40 vmti
--- Finished state OK at 09:17:08.178 - Runtime 00:00:01.087 ---


==> Ich bekomme jetzt ISO Datum!

Und ich weiss nun, wie man Python-Programmen geaenderte Funktionen
unterschieben kann, ohne den Original Source Code aendern zu muessen.
Den Trick kann ich spaeter bestimmt noch oefters gebrauchen!
Sehr gut!

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