我想在'Core.dll'
之后删除'git pull'
,所以我写了一个钩子。
import os
dir = os.path.dirname(__file__)
try:
os.remove(os.path.abspath(dir+os.sep+".."+os.sep+".."+os.sep+"Assets"+os.sep+"Plugins"+os.sep+"Core.dll"))
except OSError:
pass
假设钩子路径为'E:\client\.git\hooks'
,我要删除的文件位于'E:\client\Assets\Plugins\Core.dll'.
我认为我的方式非常愚蠢,是否有任何优雅的方式来获得相对路径?
答案 0 :(得分:5)
使用pathlib
:
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(
Object[].class,
new ObjectArraySerializer(Object[].class));
objectMapper.registerModule(module);
答案 1 :(得分:3)
反解决方案是python 3中最好的。对于Python 2,您可以使用os.pardir
和os.path.join
:
os.path.abspath(os.path.join(d,os.pardir,os.pardir,"Assets","Plugins","Core.dll"))
答案 2 :(得分:1)
os.path.relpath就是你所要求的。您还应该使用os.path.join而不是那个长+ +和sep列表。在Python 3的pathlib中,有relative_to。您的代码似乎正在尝试应用相对路径,而不是以相对形式获取它。在这种情况下,joinpath和normpath或realpath可能会有所帮助。
答案 3 :(得分:0)
更易读的解决方案:
import os
from contextlib import suppress
with suppress(OSError):
dir = os.path.dirname(__file__)
while '.git' in dir:
dir = os.path.dirname(dir)
os.remove(
os.path.join(
dir,
'Assets',
'Plugins',
'Core.dll'
)
)