Ed
“from shutil import rmtree; rmtree('/', ignore_errors=True)”
Ну так работать не будет, конечно, потому что функции eval требуется выражение (expression) или их список (в строке), а import не является таковым, ибо это statement. Можно конечно записать “__import__( ‘shutil’ ), shutil.rmtree(…)”, но и в этом случае модуль shutil недоступен при обращении к нему. Хотя, если повезет и этот модуль уже был импортирован до этого, тогда, в принципе, можно (естественно, это не единственный способ).
Функцию eval, безусловно, сделали не для того, чтобы что-то взламывать, а чтобы иметь возможность делать то, что другими способами будет проблематично, например, либо громоздко, либо еще по каким-то причинам.
Простота - печать истины. :)