Есть ли потенциальный vuln при использовании в качестве объекта после с оператором? - PullRequest
0 голосов
/ 21 мая 2018

Я использую python3.6 в virtualenv.И мне интересно, если я использую объект извне с оператором.

Это пример кода для вопроса.

with tempfile.NamedTemporaryFile(delete=False) as tf:
    tf.write(audio_stream)

# outside of with
print(tf.name)  # is it dangerous?

Я хочу сделать только написать с оператором и делать другие вещивне с.(Например, tf.name).Существует ли потенциальная угроза доступа к объекту tf извне?(Непреднамеренная сборка мусора и т. Д.)

Если это не рекомендуется, мне также интересна точная причина.спасибо

1 Ответ

0 голосов
/ 21 мая 2018

Нет непреднамеренного сбора мусора.Каждый класс объекта решает, что значит для него выход из with, поэтому нет строгого правила.Обычно удерживаемые ресурсы, такие как дескриптор основного файла, закрываются, но другие атрибуты, которые обычно не меняются при закрытии, не изменяются.

В вашем случае временный файл закрыт, поэтому чтение / запись / поиск и т. Д.не работает, но атрибут name безопасен для чтения.

Если вам действительно нужно знать для данного объекта, откройте его источник и посмотрите на его __exit__ метод.

...