É possível "hackear" a função de impressão do Python?
Nota: Esta pergunta é apenas para fins informativos. Estou interessado em ver o quão profundo nos elementos internos do Python é possível ir com isso.
Não faz muito tempo, começou uma discussão dentro de um certoPergunta, questão sobre se as strings passadas para imprimir instruções podem ser modificadas após / durante a chamada paraprint
tem sido feito. Por exemplo, considere a função:
def print_something():
print('This cat was scared.')
Agora quandoprint
for executada, a saída para o terminal deve exibir:
This dog was scared.
Observe que a palavra "gato" foi substituída pela palavra "cachorro". De alguma forma, algo em algum lugar foi capaz de modificar esses buffers internos para alterar o que foi impresso. Suponha que isso seja feito sem a permissão explícita do autor do código original (portanto, hackers / seqüestros).
esteComente do sábio @abarnert, em particular, me fez pensar:
Existem algumas maneiras de fazer isso, mas todas são muito feias e nunca devem ser feitas. A maneira menos feia é provavelmente substituir ocode
objeto dentro da função com um objeto diferenteco_consts
Lista. O próximo é provavelmente acessar a API C para acessar o buffer interno do str. [...]
Então, parece que isso é realmente possível.
Aqui está minha maneira ingênua de abordar esse problema:
>>> import inspect
>>> exec(inspect.getsource(print_something).replace('cat', 'dog'))
>>> print_something()
This dog was scared.
Claro,exec
é ruim, mas isso realmente não responde à pergunta, porque na verdade não modifica nadadurante quando / depois print
é chamado.
Como isso seria feito como o @abarnert explicou?