[英]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.