【问题标题】:Python get windows temp directory full pathPython获取windows临时目录完整路径
【发布时间】:2020-11-10 22:41:40
【问题描述】:

这是一个相对简单的事情,但由于某种原因,我找不到通过 python 获取 windows temp 目录的完整路径或找到已在堆栈溢出社区中发布的类似请求的方法。

我正在使用 tempfile.gettempdir() 命令,但似乎无法捕获完整路径并返回短版本:

'C:\Users\SVETLO~1\AppData\Local\Temp'

这总体上可行,但脚本的一个重要部分稍后不起作用,它需要完整的临时目录路径,即:

C:\Users\SvetlozarDraganov\AppData\Local\Temp\

有谁知道如何使用 python 获取 windows-temp 文件夹的完整绝对路径?

提前致谢。 斯韦特

编辑-1:

我正在测试来自 CMD 的 %fA 建议,但由于某种原因,它不起作用。如果我使用 %sA 属性,它实际上会返回短路径版本:

CMD:for %A in ("C:\Users\SvetlozarDraganov\AppData\Local\Temp") do @echo %~sA

输出:C:\Users\SVETLO~1\AppData\Local\Temp

但是 %fA 属性不返回完整路径:

CMD:for %A in ("C:\Users\SVETLO~1\AppData\Local\Temp") do @echo %~fA

输出:C:\Users\SVETLO~1\AppData\Local\Temp

【问题讨论】:

  • 如果你得到'C:\Users\SVETLO~1\AppData\Local\Temp',你试过用os.path.expanduser('C:\Users\SVETLO~1\AppData\Local\Temp')docs.python.org/3/library/os.path.html#os.path.expanduser
  • 虽然这看起来正是我正在寻找的,但它并没有按预期工作。不幸的是,它返回相同的字符串。

标签: python


【解决方案1】:

说到完整的绝对路径,你已经有了。

“短版本”是 VFAT 之前存在的 8.3 文件名,而“完整路径”是指“长文件名”或 LFN。只要访问相关文件,它们就可以互换。

在 Windows 命令提示符下,您可以使用parameter expansions 将短转换为长再转换回。有关示例,请参见解决方案 here(在您的情况下将答案中的 %~sA 替换为 %~fA)。所以你可以利用它并使用subprocess.run() 调用命令来读取输出。

我不记得 Python 有用于执行此转换的内置函数。但是Windows API 可以:您可能想看看this 解决方案如何将LFN 转换为短文件名,在您的情况下,该函数应该是GetLongPathName()

【讨论】:

  • 添加我的评论作为答案,因为没有办法让它在 cmets 部分可读,不幸的是。
【解决方案2】:

我在 python os 模块中为我的问题找到了一个开箱即用的解决方案: https://docs.python.org/2/library/os.path.html#os.path.realpath

返回长版本路径!

谢谢大家!

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 2010-10-11
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    相关资源
    最近更新 更多