Создать временный FIFO (именованный канал) в Python?

DECLARE @MyDate datetime

-- ... set your datetime's initial value ...'

DATEADD(d, 1, @MyDate)
27
задан Dougal 27 June 2014 в 19:08
поделиться

4 ответа

os.mkfifo () завершится ошибкой с исключением OSError: [Errno 17] Файл существует , если файл уже существует, поэтому здесь нет проблем с безопасностью. Проблема безопасности при использовании tempfile.mktemp () - это состояние гонки, при котором злоумышленник может создать файл с тем же именем, прежде чем вы откроете его самостоятельно, но поскольку os.mkfifo ( ) завершается ошибкой, если файл уже существует, это не проблема.

Однако, поскольку mktemp () устарел, вы не должны его использовать. Вместо этого вы можете использовать tempfile.mkdtemp () :

import os, tempfile

tmpdir = tempfile.mkdtemp()
filename = os.path.join(tmpdir, 'myfifo')
print filename
try:
    os.mkfifo(filename)
except OSError, e:
    print "Failed to create FIFO: %s" % e
else:
    fifo = open(filename, 'w')
    # write stuff to fifo
    print >> fifo, "hello"
    fifo.close()
    os.remove(filename)
    os.rmdir(tmpdir)

РЕДАКТИРОВАТЬ: Я должен прояснить, что только потому, что этим предотвращена уязвимость mktemp () , все еще есть другие обычные проблемы безопасности, которые необходимо учитывать; например

26
ответ дан 28 November 2019 в 05:32
поделиться

How about using

d = mkdtemp()
t = os.path.join(d, 'fifo')
3
ответ дан 28 November 2019 в 05:32
поделиться

Если он предназначен для использования в вашей программе, а не с какими-либо внешними элементами, взгляните на модуль очереди . В качестве дополнительного преимущества очереди Python являются потокобезопасными.

3
ответ дан 28 November 2019 в 05:32
поделиться

Why not just use mkstemp()?

For example:

import tempfile
import os

handle, filename = tempfile.mkstemp()
os.mkfifo(filename)
writer = open(filename, os.O_WRONLY)
reader = open(filename, os.O_RDONLY)
os.close(handle)
-1
ответ дан 28 November 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: