python-3.x - 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
成为问题根源的错误,我通过安装解决了它们ghostscript
usinghomebrew
因为我显然没有事先安装它。
但是现在我在两个不同的命令行中得到了两个单独的错误
如果我要在 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")
解决方案
推荐阅读
- spring-boot - Flyway H2和MySql升级后不匹配
- php - PHP,如何扩展我的代码以检查给定位置是否不包含在数据库中?
- python - RuntimeError:模型类 django_embed.models.SeaSurfaceTemperature 未声明显式 app_label 且不在
- android - 矢量绘图中的微光动画
- azure - azure-pipeline.yml 的目的是什么
- android - 为屏幕密度选择了错误的布局
- python - 既然 scipy.misc.imresize 已从 scipy 中删除,如何调整图像大小?
- controller - Rails 5.2:EventsController#new 中的 ActionController::ParameterMissing 用于嵌套资源
- javascript - 使用查询参数从 Firebase 获取产品ById
- angular - forkJoin 的成功回调没有被调用