当前位置: 首页 > 面试题库 >

Python-如何正确确定当前脚本目录?

廉志强
2023-03-14
问题内容

我想看看确定python中当前脚本目录的最佳方法是什么?

我发现由于调用python代码的方式很多,很难找到一个好的解决方案。

这里有一些问题:

  • __file__如果脚本与执行没有定义exec,execfile
  • __module__仅在模块中定义

用例:

  • ./myfile.py
  • python myfile.py
  • ./somedir/myfile.py
  • python somedir/myfile.py
  • execfile(‘myfile.py’) (来自另一个脚本,该脚本可以位于另一个目录中,并且可以具有另一个当前目录。

我知道没有完美的解决方案,但是我正在寻找能够解决大多数情况的最佳方法。

最常用的方法是,os.path.dirname(os.path.abspath(__file__))但是如果你使用来从另一个脚本执行脚本,则此方法实际上不起作用exec()

注意
使用当前目录的任何解决方案都会失败,这可能会因调用脚本的方式而有所不同,或者可以在运行的脚本中进行更改。


问题答案:
os.path.dirname(os.path.abspath(__file__))

确实是你将获得的最好的。

exec/ 执行脚本是不寻常的execfile。通常,你应该使用模块基础结构来加载脚本。如果必须使用这些方法,我建议设置__file__globals传递给脚本,以便它可以读取该文件名。

没有其他方法可以在执行代码中获取文件名:如你所述,CWD可能位于完全不同的位置。



 类似资料:
  • 我试图运行一个. jar文件,这是在Netbean中成功创建的,我收到以下错误: 初始化VM java时出错。lang.错误:Properties init:无法确定当前工作目录。在爪哇。lang.System。java上的initProperties(本机方法)。lang.System。initializeSystemClass(System.java:1070) 我键入以运行的命令。罐子是 我

  • 问题内容: 我通常在Python脚本中使用以下shebang声明: 最近,我遇到了这个shebang声明: 在脚本文档中,已指出使用此表单“更具可移植性”。 这个声明是什么意思?路径中间为什么会有空间?它实际上有助于提高可维护性吗? 问题答案: 之所以具有更高的可移植性,是因为该程序通常可用于在没有完整路径的情况下“激活”所需的命令。 否则,您将必须指定Python解释器的完整路径,该路径可能有所

  • 我不能正确使用“float:right”在它上有没有一个解决方案,将它定位在div的右侧部分,而不使用(左右边距-左边距-右)? null null

  • 我想使用PHP et MongoDB驱动程序在MongoDB集合中存储日期。 以下是我的部分脚本: 第一连接: 第二:文档创建 $queryArray属性包含我要创建的键/值对。 添加了一种转换方法,可以管理日期并将其转换为MongoDB ISODate:使用\MongoDB\BSON\UTCDateTime作为MongoUTCDate。。。公共静态函数toISODate($date){if(is

  • 问题内容: 我收到了一些经过编码的文本,但是我不知道使用了什么字符集。有没有办法使用Python确定文本文件的编码?如何检测 C#处理的文本文件的编码/代码页。 问题答案: 但是,某些编码针对特定语言进行了优化,并且语言不是随机的。某些字符序列始终弹出,而其他字符序列毫无意义。一个会说英语的人,打开报纸发现,会立即意识到这不是英语(即使它完全由英文字母组成)。通过研究大量“典型”文本,计算机算法可

  • 我有一些代码,其中多个方法使用键盘,并在主方法中连续调用。我正在做的练习特别要求使用4种不同的方法,所以我不能把它们放在一起。最初,我用键盘。在每个方法的末尾关闭(),但当第二个方法运行时,无论调用顺序如何,这都会导致NoTouchElementException。通过卸下键盘。close(),代码现在可以工作了,但是我现在收到了资源泄漏的警告,因为键盘没有关闭。有人能告诉我一种关闭输入而不出错的