【问题标题】:Determine ghostscript version确定 ghostscript 版本
【发布时间】:2013-01-16 19:38:11
【问题描述】:

我曾经写过一篇关于将 graphis 与外部程序结合起来的博客,并收到了一位读者 (-click here-) 的精彩评论,关于在 R 中使用 ghostscript 完全实现这一点,如下所示。我最近一直在使用它,并想与他人分享。我想修改它以使功能更直观,检测 ghostscript 类型是我想做但不能做的一个 mod。通过.Platform,unix 与 windows 很容易。症结在于我挣扎的Windows 32 vs. 64。

如何使用 R 来检测正在运行的 ghostscript 版本(gswin32c 或 gswin64c)?仅仅看计算机的规格是不够的,因为我在 Win 64 机器上运行 gswin32c。我们的想法是完全删除 os 参数或将其设置为 NULL 并让函数尝试访问此信息。

mergePDF <- function(infiles, outfile, os = "UNIX") {
    version <- switch(os,
        UNIX = "gs",
        Win32 = "gswin32c",
        Win64 = "gswin64c")
    pre = " -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="
    system(paste(paste(version, pre, outfile, sep = ""), infiles, collapse = " "))
}


pdf("file1.pdf", width = 10, height = 8)
plot(1:10, col="red", pch = 19)
dev.off()

pdf("file2.pdf", width = 16, height = 8)
plot(1:10)
dev.off()

mergePDF("file1.pdf file2.pdf", "mergefromR.pdf", "Win32")

【问题讨论】:

标签: r


【解决方案1】:

泰勒,伙计。我是否从 Stack Ove-R-flow 同行降级为您博客的“读者”?或者那是一种促销活动;)

这对我来说有点骇人听闻,但应该可以完成工作。将此添加为函数的前几行并删除 os 参数:

testme <- c(UNIX = "gs -version", 
            Win32 = "gswin32c -version", 
            Win64 = "gswin64c -version")
os <- names(which(sapply(testme, system) == 0))

我使用了-version 开关,这样 R 就不会尝试不必要地加载 Ghostscript。

在我的 Ubuntu 系统上,当我运行它时,os 按预期返回 UNIX,而在我安装了 32 位版本 Ghostscript 的 Windows 系统上,它返回 Win32。在运行 32 位 GS 的 64 位机器上试一试,然后告诉我它是如何工作的。


更新

在阅读了system()system2() 的帮助页面后,我了解到Sys.which(),这似乎正是您正在寻找的。这是在我的 Ubuntu 系统上运行的:

Sys.which(c("gs", "gswin32c", "gswin64c"))
#            gs      gswin32c      gswin64c 
# "/usr/bin/gs"            ""            "" 
names(which(Sys.which(c("gs", "gswin32c", "gswin64c")) != ""))
# [1] "gs"

因此,可以在mergePDF() 函数中完全跳过操作系统规范:

mergePDF <- function(infiles, outfile) {
  gsversion <- names(which(Sys.which(c("gs", "gswin32c", "gswin64c")) != ""))
  pre = " -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="
  system(paste(paste(gsversion, pre, outfile, sep = ""), infiles, collapse = " "))
}

您可能想要进行一些错误检查。例如,如果gsversion 的长度 > 1 或为 0,您可能希望停止该函数并提示用户安装 Ghostscript 或验证其 Ghostscript 版本。

【讨论】:

  • 我有时无法与人建立联系。这很有趣 :) 仍然是一个很棒的答案 :) 如果你有兴趣,我已经将这个答案和你的答案合并到一个 github 包中 github.com/trinker/plotflow 谢谢你的回复。这对工作流程非常有用。
  • @TylerRinker,不用担心——我曾经在这里是“mrdwab”,直到我达到 10k 并决定改用我的真名。不是每个人都建立了这种联系;)我会尽快检查包(正确链接here)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 2010-12-29
  • 2012-06-07
相关资源
最近更新 更多