确定文件';python中不同工作目录的路径名

确定文件';python中不同工作目录的路径名,python,file,relative-path,Python,File,Relative Path,我有一个python模块,在我的几个项目之间共享(每个项目都有不同的工作目录)。此共享模块中的一个函数使用os.spawn执行脚本。问题是,我不确定给os.spawn指定什么路径名,因为我不知道调用函数时当前工作目录是什么。如何以任何调用方都能找到的方式引用该文件?谢谢 将它放在一个众所周知的目录(/usr/lib/yourproject/或~/lib或类似的目录)中,或者根据使用它的源文件的位置将它放在一个众所周知的相对路径中 所以我刚刚了解了\uuuu file\uuu变量,它将为我的问题提

我有一个python模块,在我的几个项目之间共享(每个项目都有不同的工作目录)。此共享模块中的一个函数使用os.spawn执行脚本。问题是,我不确定给os.spawn指定什么路径名,因为我不知道调用函数时当前工作目录是什么。如何以任何调用方都能找到的方式引用该文件?谢谢

将它放在一个众所周知的目录(/usr/lib/yourproject/或~/lib或类似的目录)中,或者根据使用它的源文件的位置将它放在一个众所周知的相对路径中

所以我刚刚了解了
\uuuu file\uuu
变量,它将为我的问题提供解决方案。我可以使用file获得一个路径名,该路径名在所有项目中都是常量,并使用该路径名引用我需要调用的脚本,因为脚本将始终位于相对于
\uuuuuu file\uuuuu
的相同位置。但是,如果有人有其他/更好的方法,我愿意使用这些方法。

以下代码将找到调用模块的位置,从程序员的角度来看,这是有意义的:

    ## some magic to allow paths relative to calling module
    if path.startswith('/'):
        self.path = path
    else:
        frame = sys._getframe(1)
        base = os.path.dirname(frame.f_globals['__file__'])
        self.path = os.path.join(base, path)
也就是说,如果您的项目位于/home/foo/project中,并且您希望在scripts/中引用脚本“myscript”,则只需传递“scripts/myscript”。代码段将指出调用方位于/home/foo/project中,整个路径应为/home/foo/projects/scripts/myscript


或者,您可以随时要求程序员指定完整路径,并使用os.path.exists(如果存在)进行检查。

您可能会发现本PyCon 2010演示文稿中的资料非常有用。他们解决的一个问题是跨平台一致地查找数据文件以及代码的已安装与开发签出。

您可以通过在字符串周围加上反勾(`),将文件更改为
\uuuuuuuuuuuuuuuuuuuuu
。编辑器中还有一个按钮(看起来像“101\n010”)来做同样的事情。通常最好使用
os.path.abspath(\uu文件\uuu)
来获取模块的完整路径,这样以后在CWD中的任何更改都不会破坏它。