[Python-de] Re: Funktion ueberschreiben?

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

>>> % 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" ?
> 
> Ja.
> 
>> Aber da steht doch drin:
>> import time
>> was mir meine grad modifizierte time.asctime() Funktion wieder ueberschreibt?
> 
> Nein. "import" funktioniert ähnlich wie "use" in Perl. Wenn ein Modul
> schon importiert wurde, wird es kein zweites Mal importiert.

Ahh... sehr gut. Wieder was gelernt :-)

Prinzipiell gefaellt mir dieser Ansatz, aber ich hab wohl noch was falsch
gemacht (duply ruft duplicity auf):

root@obertux:/opt/s3tik/bin# type -a duplicity
duplicity is /opt/s3tik/bin/duplicity
duplicity is /usr/bin/duplicity

root@obertux:/opt/s3tik/bin# duply root list
Start duply v2.2, time is 2022-12-05 08:57:09.
Using profile '/root/.duply/root'.
Using installed duplicity version 0.8.12, python 3.8.10 (/usr/bin/python3), gpg 2.2.19 (Home: /root/.gnupg), awk 'mawk 1.3.4 20200120', grep 'grep (GNU grep) 3.4', bash '5.0.17(1)-release (x86_64-pc-linux-gnu)'.
Checking TEMP_DIR '/tmp' is a folder and writable (OK)
Test - En/Decryption skipped. (GPG disabled)

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


root@obertux:/opt/s3tik/bin# fpg -p asctime /usr/lib/python3/dist-packages/duplicity/dup_time.py
def timetopretty(timeinseconds):
    u"""Return pretty version of time"""
    return time.asctime(time.localtime(timeinseconds))
#   return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(timeinseconds))
    

Mit der letzten auskommentierten Zeile hatte es zuvor funktioniert. 
Ich verstehe nicht, warum es nun zu obiger Fehlermeldung kommt (line 169
ist die drueber).
Was hab ich uebersehen?


>>> Was mich wieder zu der Frage zurückführt, wie Du da ein Wrapper-Script
>>> installieren willst.
>>
>> $HOME/bin, /var/tmp/bin, etc
> 
> D.h. du willst das nur für dich, nicht für die anderen User des Systems?
> (Dass Du oben /opt erwähnst, widerspricht dem etwas)

Ich teste es erst mal lokal auf meinem eigenem System, da kann ich /opt
beschreiben.


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