【问题标题】:Why does this file I/O code not work under Eclipse/ PyDev but works in terminal?为什么这个文件 I/O 代码在 Eclipse/PyDev 下不起作用,但在终端中起作用?
【发布时间】:2016-11-28 08:24:56
【问题描述】:

我有工作代码,其中我使用 tesseract 从图像文件中提取数据,如下所示:

if src:
    driver.get(src)
    driver.save_screenshot('/Users/username/script/' + 'test.png')
    image_name = 'test.png'
    im = Image.open(image_name)
    image_text = pytesseract.image_to_string(im)
    print '\nImage Text:\t', image_text

当我执行代码时,这段代码 sn-p 在 Mac 终端中没有任何错误,但是当我在 Eclipse 中使用 PyDev 执行相同操作时,它会引发错误:

Exception:  [Errno 2] No such file or directory

尝试执行该行时:

im = Image.open(image_name)

为什么在 Eclipse 中会发生这种情况?

更新:由于我的代码对少数人来说似乎很时髦,我已将其更改如下,但问题仍然存在(在 mac 终端上运行得非常好,但 Eclipse 一直给我同样的错误)

if src:
    driver.get(src)
    image_name = 'test.png'
    image_path = os.path.realpath(image_name)
    driver.save_screenshot(image_path)

    # read chart data from image
    im = Image.open(image_path)

【问题讨论】:

  • 我猜图像不在工作目录中。您可以在运行配置中调整工作目录或使用绝对文件名(带路径)。
  • 您可以尝试使用完整路径来读取图像。 Image.open("/Users/username/script/test.png")
  • @KlausD。图像确实在同一个工作目录中,这就是为什么它可以在终端中工作?
  • @SunilT 我在使用完整路径image_name = '/Users/username/script/test.png'时遇到同样的异常@

标签: python terminal pydev


【解决方案1】:

所以终于按照@Fabio 的建议使用回溯解决了这个问题。它与当前目录中不存在的图像文件无关,但在路径中找不到 tesseract 的问题。

在 pytesseract.py 文件中,内容如下:

# CHANGE THIS IF TESSERACT IS NOT IN YOUR PATH, OR IS NAMED DIFFERENTLY
tesseract_cmd = 'tesseract'

请注意,直接更改 pytesseract.py 文件不是一个好主意,但是在您要导入 pytesseract 的任何文件中,添加以下行(tesseract 的路径将取决于您的特定机器...在 mac 中我能够找到使用which 命令的路径:which tesseract)

pytesseract.pytesseract.tesseract_cmd = '/usr/local/bin/tesseract'

【讨论】:

  • @JonahGraham 谢谢,我已经找到了我的修复并把它贴在上面
【解决方案2】:

您的代码有点奇怪...您使用路径保存,然后使用 image_name。

用下面的代码试试:

import os

filename = '/path/to/the/image.png'
driver.save_screenshot(filename)
if not os.path.exists(filename):
    raise AssertionError("Image: %s does not exist" % (filename,))
Image.open(filename)

如果不起作用,请粘贴堆栈跟踪的全部内容。

【讨论】:

  • 我用你的代码试过了,堆栈跟踪还是一样Exception: [Errno 2] No such file or directory
  • 我已根据您的评论更新了我的代码(见上文),但仍然是相同的异常
  • 在您的新代码中,您没有添加我概述的 os.path.exists() 调用...另外,请发布异常的完整内容,不只是最后一点。
  • 这是异常的完整内容,请看链接here中的截图。我还包括你 os.path.exists() 调用。
  • 嗯,在你的 except 子句中,你不应该像你正在做的那样打印异常,而是在你的异常处理程序中将它打印为:import traceback;traceback.print_exc() 以获得 full 堆栈跟踪——PyDev 实际上有一个模板,所以,你可以写 printexc Ctrl+Space 并为你写这些内容;)
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多