【问题标题】:Can Not Run Python Script Unless I Am In The Directory Where The Python Script Resides除非我在 Python 脚本所在的目录中,否则无法运行 Python 脚本
【发布时间】:2014-07-23 22:53:32
【问题描述】:

我在 Windows 7 上使用 Python 3.3.1。

我可以从命令行使用这个命令执行我的 python 脚本

C:\Users\gyorulmaz\workspace\Test_Automation\Source>python TestAutomation.py

但是,如果我尝试从其他位置启动 python

C:\python C:\Users\gyorulmaz\workspace\Test_Automation\Source\TestAutomation.py

我收到一条错误消息

File "C:\Python33\lib\configparser.py", line 1136, in _unify_values
raise NoSectionError(section) configparser.NoSectionError: No section: 'automation'

我猜我需要在我的 python 环境中配置一些东西。

我们将不胜感激。

【问题讨论】:

  • TestAutomation.py 中有什么内容?看起来它正在尝试读取您正在更改的当前工作目录中的配置文件。您可能需要更改脚本以相对于脚本本身的路径查找此文件。
  • 您是在运行 C:\python 还是在 c:\ 位置运行 python。好像你不是。你正在运行一个文件 c:\python(它不存在),就好像你将从 C:\ 运行它一样,然后它看起来像 C:\>python ....
  • @ArunSangal:他的脚本显然是在 Python 3.3 中启动的,并且至少可以构建一个 configparser.ConfigParser 对象,这意味着这不是问题所在。跨度>

标签: python


【解决方案1】:

虽然无法确定您何时不向我们展示任何代码,但最有可能的问题是脚本试图在与脚本相同的目录(或子目录或其他相对路径)中打开文件.

例如:

f = open('spam.txt')

这不是与脚本在同一目录中的文件,而是当前工作目录中的文件。因此,除非当前工作目录恰好是脚本所在的目录,否则您将获得 FileNotFoundError

在您的情况下,您使用的是configparser,它会将FileNotFoundError 视为一个空文件,因此它会成功导入一个空配置,但只要您要求'automation'部分,显然不会有这样的部分,所以你会得到一个NoSectionError


通常,您会希望在某处安装一个脚本,并在某处安装它需要的任何数据文件,而不是在开发目录之外运行它们。 Python 有各种各样的方法可以做到这一点,但是您将不得不阅读有关在 Python 中打包内容的教程(我认为 Hitchhiker's Guide to Packaging 仍然是推荐的起点,但这可能已经过时了,所以不要在我开始解释如何打包数据文件之前,不要引用我的话……)。

但在这里,我们谈论的是配置文件。通常,这些只是转到相对于用户主目录的某个固定路径。因此,对于一个快速而肮脏的解决方案,您可以选择一些这样的相对于家庭的路径并将其硬编码到您的应用程序中。或者,为了更快更脏,如果这只是一个供您自己使用的 hacky 脚本,只需硬编码绝对路径名。


如果您真的非常想使用相对于脚本的路径,并且不想对其进行硬编码:

scriptdir = os.path.dirname(sys.argv[0])
configpath = os.path.join(scriptdir, 'my.cfg')

不幸的是,sys.argv[0] 不能保证是绝对路径名,甚至根本不能保证是路径名;允许它只是文件名。在 Python 3.4 中,您可以改用 __file__ 来解决此问题,但您使用的是 3.3,并且还有其他问题。 (有关详细信息,请参阅this question。)如果有人将您的脚本放在一个 zip 存档中并从存档中运行它(Python 可以为您做什么)怎么办?这里没有完美的答案,但上面的代码可能就是你想要的。

【讨论】:

  • 感谢您的回答。问题与找不到我在脚本中使用的配置文件之一的位置有关。本质上类似于 f = open('spam.txt')..
【解决方案2】:

您是否正在运行 C:\python 可执行文件 -- 或在 c:\ 位置运行 python

好像你不是。您正在运行一个文件 c:\python (不存在)。如果你从 C:\ 运行它,那么你会像 C:\>python 一样粘贴它......或者从来没有问过这个?。

这样做:
1. cd 到 C:\
2. 现在您将在 DOS/Windows 中看到 C:> 作为提示符
3. 运行以下命令,它应该可以工作。
python C:\Users\gyorulmaz\workspace\Test_Automation\Source\TestAutomation.py

您的屏幕将显示如下:
C:\>python C:\Users\gyorulmaz\workspace\Test_Automation\Source\TestAutomation.py

或 如果你写错了,那么你可以向Python - Find Path to File Being Run寻求帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2018-08-15
    相关资源
    最近更新 更多