如何知道您何时处于符号链接中

时间:2009-01-14 09:52:41

标签: python

如何在Python中知道您所在的目录是否在符号链接中?

我有一个目录 / tmp / foo / kiwi

我创建了指向 / tmp / foo

的符号链接 / tmp / bar

我进入 / tmp / bar / kiwi

linux命令 pwd 告诉我我在 / tmp / bar / kiwi ,这是正确的。

python命令提示符告诉我我在 / tmp / foo / kiwi

Python 2.5.1 (r251:54863, Oct  5 2007, 13:36:32) 
[GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.getcwd()
'/tmp/foo/kiwi'

有没有办法在Python中获取我真正的目录?

6 个答案:

答案 0 :(得分:6)

如果您没有找到任何其他内容,可以使用

os.getenv("PWD")

它不是一个真正的便携式python方法,但适用于POSIX系统。它获取PWD环境变量的值,该变量由cd命令(如果您不使用cd -P)设置为您导航到的路径名(请参阅{{1在运行python脚本之前。当然,python不会改变那个变量。因此,如果您在其他地方man cd,该变量将保留其值。

无论如何,作为一个侧节点,os.chdir 您所在的目录。我不确定除了shell之外是否知道您确实已经通过另一条路径导航到那个地方,实际上:))

答案 1 :(得分:2)

如果您的符号链接是按照您所说的方式设置的,那么/tmp/foo/kiwi就是您真正所在的目录。/tmp/bar/kiwi只是到达同一个地方的另一种方式。

请注意,shell命令pwd -P将为您提供当前目录的物理路径。在您的情况下,shell会记住您通过bar符号链接到达目的地,因此它会告诉您自己在/tmp/bar/kiwi

答案 2 :(得分:0)

感兴趣的是,如果您在目录中,可以使用-P选项获取pwd命令以解析指向其实际目录的所有符号链接。

$ ln -s Desktop toto
$ cd toto
$
$ pwd
/home/ken/toto
$ 
$ pwd -P
/home/ken/Desktop
$ 

HTH

欢呼声,

罗布

答案 3 :(得分:0)

您也可以尝试lstat。它将为您提供有关文件/目录的信息,包括告诉您它是否是链接并显示链接到的位置。

答案 4 :(得分:0)

当你的shell返回路径时,它依赖于shell环境变量“PWD”,它在遍历符号链接路径时被设置,但实际上它位于getcwd()返回的目录下。所以,如果你从shell的PWD中获得了你想要的东西。

>>> os.getcwd()
'/home/ors/foo/tmp/foo/kiwi'
>>> os.environ["PWD"]
'/home/ors/foo/tmp/bar/kiwi'
>>>

答案 5 :(得分:0)

这是另一种方式:

import os
os.popen('pwd').read().strip('\n')

这是python shell中的演示:

>>> import os
>>> os.popen('pwd').read().strip('\n')
'/home/projteam/staging/site/proj'
>>> # This returns actual path
>>> import subprocess
>>> p = subprocess.Popen('pwd', stdout=subprocess.PIPE)
>>> p.communicate()[0]  # returns non-symlink path
'/home/projteam/staging/deploys/20150114-141114/site/proj\n'

获取环境变量PWD并不总是适合我,所以我使用popen方法。干杯!