繁体   English   中英

在cd之后获取正在运行的文件的路径到python中的另一个目录

[英]Get path of file being run after cd to another directory in python

我在/Users/apps目录中有以下简单脚本test.py

import os
os.chdir("/Users/apps/update/diiferent_path")
path = os.path.dirname(os.path.abspath(__file__))
print(path)

我获取的路径值为/Users/apps/update/diiferent_path因为我已经更改了目录。 更改目录后,如何获取test.py路径,即/Users/apps

chdir之后是不可能的(当然,除非__file__已经包含绝对路径),因为信息会丢失。 进程启动时,当前目录不会自动存储在任何地方。 但是您可以在调用chdir之前通过调用os.path.abspath(__file__)手动存储它。

我同意pts的观点,即存储路径是要走的路。 尽管在脚本中进行了一些修改,但它最好地表明了您获取原始路径的意图。

作为参考,有两种解决方法。 路径会更改,因为脚本是按名称执行的。 然后,解释器在当前目录中找到文件。 当前目录更改,因此__file__sys.argv的绝对路径也更改。

解决该问题的一种方法是使用绝对路径调用脚本。 另一个是要认识到脚本的路径会自动添加到PYTHONPATH中 ,即sys.path 以下脚本说明了这一点:

#!/usr/bin/python

import os
import sys

os.chdir("/usr/bin")
print(os.path.abspath(__file__))
print(os.path.abspath(sys.argv[0]))
print(sys.path[0])

输出:

# /tmp$ ./so24323731.py 
/usr/bin/so24323731.py
/usr/bin/so24323731.py
/tmp
# /tmp$ /tmp/so24323731.py 
/tmp/so24323731.py
/tmp/so24323731.py
/tmp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM