【发布时间】:2010-11-28 15:54:42
【问题描述】:
如何在 Python 中创建临时 FIFO(命名管道)?这应该有效:
import tempfile
temp_file_name = mktemp()
os.mkfifo(temp_file_name)
open(temp_file_name, os.O_WRONLY)
# ... some process, somewhere, will read it ...
但是,我犹豫不决,因为 Python Docs 11.6 中的大警告和可能会被删除,因为它已被弃用。
编辑:值得注意的是,我尝试过tempfile.NamedTemporaryFile(以及扩展名tempfile.mkstemp),但os.mkfifo 抛出:
OSError -17: 文件已存在
当您在 mkstemp/NamedTemporaryFile 创建的文件上运行它时。
【问题讨论】:
-
正如您所提到的,由于 os.mkfifo 如果文件存在会引发错误,因此使用 mkstemp 甚至完全确定的文件名没有安全漏洞(除了不好的感觉和有人天真地复制您的文件的风险之外)代码)。
-
问题:您打算如何将管道名称传达给其他进程?这个频道是如何保护的?
-
@Joe:你是对的。我没有想到这一点。 @Steven Huwig:这两个进程都是由同一个父进程产生的,尽管我可能会在某个时候为此移动到一个新的 fifo。为什么要问?
标签: python security file fifo mkfifo