Das Konzept an sich ist etwas fragwürdig, wenn ein Script Root braucht,
startet man es halt als root, statt darin mit su herumzumachen, aber was
solls...
Du könntest dir eine Funktion machen, in der du das Escaping machst,
usw:
1 | #!python3
|
2 | def shell_escape(cmd):
|
3 | return ' '.join("'"+x.replace("'","'\\''")+"'" for x in cmd)
|
4 | def as_root(cmd):
|
5 | return ['su', '-', '-c', shell_escape(cmd)]
|
Oder du könntest "sudo -- " stat "su - -c" nehmen, da musst du nur die
Listen verketten, und musst das nicht mehr extra escapen.
shell=True sollte man ja vermeiden, damit man nicht je nach Shell falsch
escapt, aber su -c führt das zeug auch in einer Shell aus, damit ist man
wieder am Anfang.
1 | #!python3
|
2 | def as_root(cmd):
|
3 | return ['sudo', '--', *cmd]
|
Am besten wäre es aber immer, gar nicht erst root zu benötigen.