使用sys.path.append时os.path.isfile失败

时间:2019-06-27 16:34:41

标签: python-3.x path

我有以下内容:

application/3rdPArtyApp/file.py
application/3rdPArtyApp/directory/someFile
application/MyApp/file.py

我想从MyApp访问3rdPArtyApp中的文件,所以我在MyApp / file.py中执行以下操作

sys.path.append('../3rdPArtyApp')

这很好用,现在我可以通过导入来访问文件和功能。
但是,3rdPartyApp中有一个文件试图访问文件夹 directory / someFile 中的文件。

它使用以下命令检查其文件是否从MyApp调用时失败,但是从3rdPartyApp单独调用时不会失败。

os.path.isfile(file)

我假设从MyApp调用时是否失败,因为它希望它位于MyApp路径下。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您无法更改库代码,那么我认为您必须在每次调用之前更改工作目录。

因此,我实现了这种类似于函数的助手类change_cwd。只需使用with change_cwd('../3rdPArtyApp'):将每个函数调用包装到外部库中即可。

import os

class change_cwd:
    def __init__(self, path):
        self.path = os.path.abspath(path)
    def __enter__(self):
        self.old_cwd = os.getcwd()
        os.chdir(self.path)
    def __exit__(self, exc_type, exc_value, traceback):
        os.chdir(self.old_cwd)

print(os.getcwd())
with change_cwd('Downloads'):
    print(os.getcwd())
print(os.getcwd())
/home/<user>
/home/<user>/Downloads
/home/<user>