如何在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中获取我真正的目录?
答案 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方法。干杯!