Python 3.x 使用sys.path.append时os.path.isfile失败
我有以下资料:Python 3.x 使用sys.path.append时os.path.isfile失败,python-3.x,path,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中有一个文件试图访问文件夹目录
application/3rdPArtyApp/file.py
application/3rdPArtyApp/directory/someFile
application/MyApp/file.py
我想从MyApp访问3rdPArtyApp中的文件,因此我在MyApp/file.py中执行以下操作
sys.path.append('../3rdPArtyApp')
这很好,我现在可以通过导入文件和函数来访问它们。
但是,3rdPartyApp中有一个文件试图访问文件夹目录/someFile中的文件
它使用以下命令来检查它是否是一个无论何时从MyApp调用都会失败的文件,但当从3rdPartyApp单独调用它时不会失败
os.path.isfile(file)
我假设从MyApp调用if时失败,因为它希望它位于MyApp路径下
如何解决此问题?如果您无法更改库代码,我认为您必须在每次调用之前更改工作目录 因此,我像helper类change_cwd一样实现了这个函数。只需使用change_cwd'../3rdPArtyApp':,包装对外部库的每个函数调用
是的,它失败是因为它是一个相对路径,并且您当前的工作目录与3rdPartyApp期望的不同。如果您有权访问该应用程序,则可以将os.path.isfilefile更改为相对于_文件的路径。否则,除了运行将工作目录更改为3rdPartyApp文件夹(我想这不是您想要的)之外,您没有什么可以做的。另外:不要命名变量文件,它是python关键字。很遗憾,我无法更改3rdPartyApp代码。当我使用3rdPArtyApp中的函数时,是否有办法将工作目录更改为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>