首页 > 解决方案 > subprocess.CalledProcessError: Command '['gs', '-q', ...] 返回非零退出状态 2

问题描述

(我的操作系统是 macOS)

我正在制作一个不和谐的机器人,它允许用户通过 python 的turtle模块使用图像创建图形和显示。

创建图形后,我将画布作为文件在我的桌面上发布脚本,eps文件名中包含用户的用户名:

import turtle

...

Canvas = turtle.Screen()
Canvas.getcanvas().postscript(file=f"desktop/{context.author}'s_graphics.eps")

我试图将它作为eps文件输出,但我知道它不起作用但仍然值得一试:

import discord

...

await context.send(
    embed=discord.Embed().set_image(url="attachment://graphics.png"),
    file=discord.File(f"desktop/{context.author}'s_graphics.png","graphics.png")
)

但正如预期的那样,它没有奏效。

所以我尝试直接将其转换为png文件,如果我要手动执行此操作,该文件将变得不可读,如果我将其转换回eps它将再次可读。

然后我使用PIL模块将eps文件转换为png

import turtle
from PIL import Image

...

Canvas = turtle.Screen()
Canvas.getcanvas().postscript(file=f"desktop/{context.author}'s_graphics.eps")
image=Image.open(f"desktop/{context.author}'s_graphics.eps") # Where macOS terminal error was raised
image.convert("RGBA") # Where Visual Studio Code error was raised

我有一些涉及ghostscript成为问题根源的错误,我通过安装解决了它们ghostscriptusinghomebrew因为我显然没有事先安装它。

但是现在我在两个不同的命令行中得到了两个单独的错误

如果我要在 macOS 终端中运行脚本(并以不和谐的方式调用命令),我会收到此错误:FileNotFoundError: [Errno 2] No such file or directory: "desktop/Bossman#4404's_graphics.eps"- 很公平,我只能获得绝对路径或其他东西。<- 引发了此错误

Visual Studio Code但是,如果我在终端中运行脚本,我会收到此错误:

subprocess.CalledProcessError: Command '['gs', '-q', '-g719x675', '-r72.000000x72.000000', '-dBATCH', '-dNOPAUSE', '-dSAFER', '-sDEVICE=ppmraw', '-sOutputFile=/var/folders/ms/wv_n3bzs7zvctx07pqqzv__m0000gp/T/tmpg65g140v', '-c', '53 -59 translate', '-f', "desktop/Bossman#4404's_graphics.eps", '-c', 'showpage']' returned non-zero exit status 2.

我认为它ghostscript再次涉及基于gs异常中数组中的一个元素。

关于这个类似的异常,我浏览了几个 stackoverflow 帖子,但在所有这些帖子中,他们都直接使用了我不知道的subprocess模块,所以我不知道该怎么做。

我该如何解决?或者只是进行eps文件png转换?

任何其他帮助也将不胜感激。<3

编辑:

只是为了澄清我没有使用turtle mainloop(),或者update()因为我已经在运行一个循环client.run(TOKEN)并且据我所知我无法同时运行循环。(不和谐循环是运行异步函数。)

(即使删除image.convert("RGBA")我仍然会得到同样的错误image.save()

我刚刚注意到在异常的顶部它说:

Usage: gs [OPTIONS] COMMAND [ARGS]...
Try 'gs --help' for help.

Error: no such option: -q

然后进来

Traceback (most recent call last):

代码编辑:

import turtle
from PIL import Image
from os import system, path

...

directory = f"Users/family/Desktop/{context.author}'s_graphics"

Canvas = turtle.Screen()
Canvas.getcanvas().postscript(file=directory+".eps")
image = Image.open(path.realpath(directory+".eps"))
image.convert("RGBA") # Where error is raised
image.save(directory+".png",lossless=True)
await context.send(
    embed=embed("").set_image(url="attachment://graphics.png"),
    file=discord.File(directory+".png","graphics.png")
)
system(f"rm {directory}.png") 

标签: python-3.xsubprocessdiscord.pypython-imaging-libraryghostscript

解决方案


推荐阅读