在 with 语句之后用作对象时是否存在潜在漏洞?
Is there any potential vuln when use as object after with statement?
我在 virtualenv 中使用 python3.6。我想知道我是否使用 with object from outside with 语句。
这是问题的示例代码。
with tempfile.NamedTemporaryFile(delete=False) as tf:
tf.write(audio_stream)
# outside of with
print(tf.name) # is it dangerous?
我只想写with语句,在with之外做其他事情。 (如tf.name
)。从外部访问 tf
对象是否存在潜在威胁? (无意的垃圾回收等)
如果不推荐,我也想知道确切原因。谢谢
没有无意的垃圾收集。每个 class 对象决定退出 with
对它意味着什么,所以没有硬性规定。通常保留的资源(如基础文件句柄)已关闭,但在关闭期间通常不会更改的其他属性保持不变。
在您的情况下,临时文件已关闭,因此 read/write/seek 等...不起作用,但名称属性可安全读取。
如果您确实需要了解给定对象,请打开其源代码并查看其 __exit__
方法。
我在 virtualenv 中使用 python3.6。我想知道我是否使用 with object from outside with 语句。
这是问题的示例代码。
with tempfile.NamedTemporaryFile(delete=False) as tf:
tf.write(audio_stream)
# outside of with
print(tf.name) # is it dangerous?
我只想写with语句,在with之外做其他事情。 (如tf.name
)。从外部访问 tf
对象是否存在潜在威胁? (无意的垃圾回收等)
如果不推荐,我也想知道确切原因。谢谢
没有无意的垃圾收集。每个 class 对象决定退出 with
对它意味着什么,所以没有硬性规定。通常保留的资源(如基础文件句柄)已关闭,但在关闭期间通常不会更改的其他属性保持不变。
在您的情况下,临时文件已关闭,因此 read/write/seek 等...不起作用,但名称属性可安全读取。
如果您确实需要了解给定对象,请打开其源代码并查看其 __exit__
方法。