【问题标题】:Script finds the necessary file when running through IDLE, but cannot find the file when running through terminal [closed]脚本通过IDLE运行时找到必要的文件,但通过终端运行时找不到文件[关闭]
【发布时间】:2020-05-30 16:26:07
【问题描述】:

我有一个 python 脚本,它使用 Selenium 每小时获取我的课程成绩,并在我的成绩发生变化时向我发送电子邮件。

我有一个外部文件被引用以查看自上次写入以来是否有任何更改。

当我在空闲时按 F5 测试程序时,它按预期工作。但是当我去我的终端并输入python3 /home/pi/Desktop/gradesNotification/script.py 时,它一直有效,直到它需要用我的成绩打开文本文件。我得到了错误:

FileNotFoundError: [Errno 2] No such file or directory: 'grades'

文本文件与脚本位于同一文件夹中。程序通过 IDLE 运行时有效,但从终端启动时无效。

【问题讨论】:

  • @stovfl, cwd 是 /home/pi
  • 你看出区别了吗?您当前的目录是:/home/pi,但您的文件在 /home/pi/Desktop/gradesNotification
  • @stovfl,是的,我现在看到了!哈哈,我没有意识到这一点而感到愚蠢。谢谢!

标签: python python-3.x linux scripting raspbian


【解决方案1】:

文件名是针对当前工作目录cwd 给出的。有可能您在 IDLE 中的 cwd 是成绩所在的目录,但您的终端窗口可能在其他地方。尝试更改到正确的目录,或指定grades 文件的完整路径。

另一种方法是让您的程序检查自己的位置,并尝试从那里打开grades

【讨论】:

  • 哦,我明白了!从 IDLE 运行时,我在成绩文本文件所在的目录中工作。但是当从终端运行时,工作目录是/home/pi。正如您所建议的,我可以 cd /gradesNotification 或在 .py 文件中指定成绩文件的确切路径。谢谢!
  • 对 ... 或者让script.py 询问它所在的位置,然后使用该路径前缀找到grades
【解决方案2】:

我想最简单的解决方法是在代码中指定成绩文件的绝对路径:

"/home/pi/Desktop/gradesNotification/grades"

然而,它不会很漂亮或灵活 - here 是一篇关于使用 pathlib 库从 Python 处理文件系统访问的精彩文章。

【讨论】:

    猜你喜欢
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 2019-03-11
    • 2019-05-22
    相关资源
    最近更新 更多