【发布时间】:2015-12-31 15:30:22
【问题描述】:
我有一个 Python 程序,它会因 Nagios 检查失败而被触发并调用工程师。作为其中的一部分,它使用作为文件名的一部分失败的服务的名称来保存状态文件。这很好,除了一些服务包含斜杠(例如,用于检查是否存在 NFS 挂载点,该服务只是以挂载点命名),当 python 尝试使用此名称创建文件时,它会解释命名为目录树(树的某些部分不存在)并失败。
显然有一些方法可以解决这个问题(例如,我可以停止在文件路径中使用服务名称),但我非常喜欢它目前的设计方式,因为我可以判断给定服务的状态文件是否已经存在无需读取目录中的每个状态文件。有什么办法可以写一个包含路径分隔符的文件名?
我所追求的是这样的:
service_name = '/data/servername'
filename = escape_service_name(service_name)
statepath = os.join(state_dir, filename)
statefile = open(statepath, "w")
# Write state file details here
...但我看不出如何逃避斜线,所以这行得通。
【问题讨论】:
-
您希望实际文件名包含路径分隔符吗?如果是这样,我看不出如果操作系统使用那些完全相同的符号将路径分解为目录和文件名,那会怎样。否则,如果我误解了,您是否尝试过使用原始字符串?例如,类似于
r'/data/servername' -
是的,或者一些可行的转义序列。我不知道 Linux 是否可以通过适当的转义来允许它。不过,Dragonroot 的答案应该有效。
标签: python linux path escaping