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/