5

inkscape在 *nix 类系统(OS X 10.6.8,不同风格的 Linux)上运行 Gearman PHP 进程,以将 SVG 图像转换为 PNG 或 PDF。我使用这样的东西(为了清楚起见,这里添加了换行符):

/full/path/to/inkscape -z \
    --export-png=/path/to/output.png \
    --export-width=100 --export-height=100 \
    /path/to/input.svg

它可以工作,但是尽管有 -z 标志(“不要使用 X 服务器”),但我在控制台输出中得到了这个(在 OS X 上):

Setting Language: .UTF-8

(process:44699): Gtk-WARNING **: Locale not supported by C library.
    Using the fallback 'C' locale.
Xlib:  extension "RANDR" missing on display "/tmp/launch-WvcqRh/org.x:0".

这向我表明,inkscape 正在加载比它需要的更多的库,如果它不尝试连接到 X 服务器,它可能会更快。但是,除了使用-z/--without-gui标志之外,我不确定要尝试什么。我的开发机器上的性能仍然是亚秒级的(至少对于琐碎的 SVG 文件),但如果可以的话,我想清理它。即使最好的答案只是“抑制错误输出”!

也许如果我关闭或重置 bash DISPLAY env var?我对X一点也不熟悉。

4

3 回答 3

7

是的,如果您想让您的程序根本找不到 X,您可以unset DISPLAY在启动该过程之前。

你也可以使用 Xvfb 来“伪造”一个 X 服务器:http ://en.wikipedia.org/wiki/Xvfb

您可能还想查看这些工具:

他们的源代码真的很小。

于 2012-04-03T14:11:02.760 回答
1

另一种抑制输出的方法,同时保留响应真实错误的能力,是从 Python 调用 Inkscape。

import subprocess               # May want to use subprocess32 instead

cmd_list = [ '/full/path/to/inkscape', '-z', 
             '--export-png', '/path/to/output.png',
             '--export-width', 100,
             '--export-height', 100,
             '/path/to/input.svg' ]

# Invoke the command.  Divert output that normally goes to stdout or stderr.
p = subprocess.Popen( cmd_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE )

# Below, < out > and < err > are strings or < None >, derived from stdout and stderr.
out, err = p.communicate()      # Waits for process to terminate

# Maybe do something with stdout output that is in < out >
# Maybe do something with stderr output that is in < err >

if p.returncode:
    raise Exception( 'Inkscape error: ' + (err or '?')  )

在我的 Mac OS 系统上,粗鲁的状态消息(由原始海报描述)最终以err. 另外,对于我运行的特定工作,还有额外的消息以结束out

Background RRGGBBAA: ffffff00
Area 0:0:339:339 exported to 100 x 100 pixels (72.4584 dpi)
Bitmap saved as: /path/to/output.png

(输入 svg 文件的大小为 339 x 339 像素。)

于 2017-10-05T16:12:02.613 回答
0

(echo foo.ai --export-plain-svg foo.svg) | DISPLAY= inkscape --shell

于 2014-01-15T23:32:49.593 回答