DECLARE @MyDate datetime
-- ... set your datetime's initial value ...'
DATEADD(d, 1, @MyDate)
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 ()
, все еще есть другие обычные проблемы безопасности, которые необходимо учитывать; например
How about using
d = mkdtemp()
t = os.path.join(d, 'fifo')
Если он предназначен для использования в вашей программе, а не с какими-либо внешними элементами, взгляните на модуль очереди . В качестве дополнительного преимущества очереди Python являются потокобезопасными.
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)