Python
Python 3 if not otherwise stated
string.split()
mehrere whitespaces zusammengroupen: split() ohne argumente aufrufen. mit split(" ") ist jeder whitespace ein eigenes element, ohne ist es nur eins.
Variablen importieren aus ner anderen Datei
exec(compile(source=open('secret.py').read(),filename='secret.py', mode='exec'))
bcrypt-Passworthash
import bcrypt
password = b"batterienpferdestapel"
bcrypt.hashpw(password, bcrypt.gensalt())
JSON aus Datei lesen
import json
with open('file.json', 'r') as inputfile:
jsondata = inputfile.read()
obj = json.loads(jsondata)
Alle Attribute eines Objects anzeigen
print(name_of_object.__dict__)
prettyprint output
sehr praktisch für komplexere datenstrukturen oder sowas, genau wie zB das hier obendrüber :)
import pprint
pprint.pprint(name_of_object.__dict__)
Profiling mit cProfile
In Python eingbauter Profiler, mit dem man sehen kann, wieviel Zeit Python in welcher Funktion etc. verbringt.
python3 -m cProfile /usr/bin/firewall-cmd --permanent --get-zones
Nützlicherer Output, wenn man nach Zeit sortiert:
python3 -m cProfile -s time /usr/bin/firewall-cmd --permanent --get-zones
Kann man ansonsten auch ins Script importieren und auf eigene Funktionen anwenden:
import cProfile
cProfile.run('foo()')
Quelle: https://stackoverflow.com/questions/582336/how-do-i-profile-a-python-script
venv aktivieren in Dockerfile
geht net so wie man es erwartet, weil natürlich jedes RUN in nem eigenen prozess ausgeführt wird. um nachhaltig die richtigen binaries zu verwenden, ohne jedes mal irgendwas sourcen oder sie manuell angegebn zu müssen, einfach den PATH anpassen:
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
VIRTUAL_ENV dabei nicht strictly nötig, wird zb von poetry verwendet. geht vmtl auch ohne, aber in dem setup ist es ganz praktisch
https://pythonspeed.com/articles/activate-virtualenv-dockerfile/