我能用包含路径分隔符的Linux文件名来写吗?

2024-09-30 01:37:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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

…但我不知道怎么才能逃出刀口,这样才行得通。在


Tags: 文件name路径程序目录名称文件名状态
2条回答

您可以通过用其他符号替换斜杠来“转义”。当然,会出现一些碰撞。但我想文件名中允许有符号,但服务名中没有。在

更复杂的解决方案:可以使用base32之类的方法对服务名称进行编码。在

文件名不能直接使用路径分隔符。我在这些情况下使用了百分比编码:

import urllib

# outputs "foo%2Fbar"
print urllib.quote('foo/bar', '')

这种解决方案的好处是百分数编码是完全可逆的,因此可以完美地重建文件名。如果您只是将/替换为_,您将无法知道原始字符是/还是{}。使用百分比编码,您可以,因为它也会转义%符号。在

相关问题 更多 >

    热门问题