【发布时间】:2020-08-31 08:27:07
【问题描述】:
我有一个有效的 bash 脚本,它创建 和/或 将当前符号链接重写到新路径,而没有任何数据竞争。如果程序尝试查找路径,它要么从符号链接中获取旧路径,要么获取新路径。这是因为 -f 模式。以下是 bash 中的外观:
cd /srv/
ln -nsf /home/myproject/video123.ts latest_video.mkv
ln -nsf /home/myproject/video124.ts latest_video.mkv
ln -nsf /home/myproject/video125.ts latest_video.mkv
在 python3 中有一个名为 os.symlink() 的模块,它创建一个符号链接,但它无法实现覆盖行为。
import os, errno
def symlink_force(target, link_name):
try:
os.symlink(target, link_name)
except OSError, e:
if e.errno == errno.EEXIST:
os.remove(link_name)
os.symlink(target, link_name)
else:
raise e
正如您在短时间内看到的那样,在调用 os.remove(link_name) 方法时会出现停机时间。关于如何在不删除现有符号链接的情况下进行覆盖的任何想法?
任何帮助表示赞赏。
【问题讨论】:
标签: python-3.x bash symlink data-race