- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在尝试使用 launchd
安排 R 脚本时遇到意外问题:在终端 (Mac OS X 10.7.5) 中使用 Rgui 或 Rscript,脚本运行没有问题,但是当使用 launchd 运行脚本时,它似乎存在编码问题。
作为一个例子,这个脚本从 Le Monde 杂志的 RSS 提要创建一个词云:
#!/usr/bin/Rscript
require(wordcloud)
require(tm)
require(XML)
titles <- xpathSApply(htmlParse("http://www.lemonde.fr/rss/une.xml"),"//item/title",xmlValue)
titles <- gsub("[[:punct:]]"," ",titles)
rss <- Corpus(VectorSource(titles),readerControl=list(language="fr"))
rss <- tm_map(rss, stripWhitespace)
rss <- tm_map(rss, function(x)removeWords(x,stopwords("fr")))
tdm <- TermDocumentMatrix(rss)
m <- as.matrix(tdm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
png("/path/to/wordcloud.png",w=5,h=5,units="in",res=100)
par(mar=c(0,0,0,0))
wordcloud(d$word,d$freq,scale=c(3,.1),min.freq=2)
dev.off()
在使用 chmod +x
获得权限后,如果我通过 Rgui 或通过终端运行脚本,我会得到如下信息:
但是如果我创建一个 LaunchAgent 来安排此脚本在给定的时间间隔内使用 plist 文件运行,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>test</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/test.R</string>
</array>
</dict>
</plist>
然后加载它并启动它:
launchctl load ~/Library/LaunchAgents/test.plist
launchctl start test
这是我得到的:
所以我想我的问题是:
- 为什么会这样?
- 如何解决这个问题?
编辑
在 @hrbrmstr 评论之后,我在代码中插入了 writeLines(capture.output(Sys.getenv()), con="/tmp/launchenv.txt")
行。Sys.getenv()
的内容之间的主要区别在于,对应于 Rgui 的内容包含与其他两个不同的 R_PLATFORM
,而 R_LIBS
而另外两个有一个 DYLD_LIBRARY_PATH
和 R_DEFAULT_PACKAGES
。
Rgui 和终端的唯一共同点,但与 launchd 的输出不同的是,PATH 包含 /usr/local/bin
(这是我的计算机上不存在的文件夹,事实上)在其他一切之上。尽管如此,我还是尝试在代码中添加这两行时运行脚本:
Sys.setenv(LANG='en') #language of my GUI, just in case
Sys.setenv(PATH='/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin')
但它并没有改变任何东西。
最佳答案
我想我终于解决了这个问题,同时在不同的情况下遇到了它。
考虑这段代码,类似于问题中的代码,不同之处在于输出是一个文本文件:
#!/usr/bin/Rscript
require(wordcloud)
require(tm)
require(XML)
titles <- xpathSApply(htmlParse("http://www.lemonde.fr/rss/une.xml"),"//item/title",xmlValue)
titles <- gsub("[[:punct:]]"," ",titles)
rss <- Corpus(VectorSource(titles),readerControl=list(language="fr"))
rss <- tm_map(rss, stripWhitespace)
rss <- tm_map(rss, function(x)removeWords(x,stopwords("fr")))
tdm <- TermDocumentMatrix(rss)
m <- as.matrix(tdm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
sink("test.txt")
for(i in d$word) cat(i,"\n")
sink()
我现在在 Mac OSX 10.10 上工作,现在问题中出现的问题也发生在通过终端启动脚本时,而不仅仅是使用 launchd。在这两种情况下生成的 test.txt
文件包含:
contre
crise
des
2015
2<U+00A0>milliards
<U+00A0>centre
<U+00AB><U+00A0>il
<U+00AB><U+00A0>jungle<U+00A0><U+00BB>
<U+00E9>limin<U+00E9>s
<U+00E9>lus
<U+2019>attaque
<U+2019>etat
<U+2019>europe
<U+2019>euros
<U+2019>opposition
<U+2019>union
acc<U+00E9>l<U+00E8>re
...
我认为,问题不在于输入期间的编码,而实际上在于输出期间的编码。这里的sink
使用了session的默认编码。
> getOption("encoding")
[1] "native.enc"
所谓的“native.enc”由 Sys.getlocale("LC_CTYPE")
根据 this comment by Brian Ripley 给出.
在 RGUI 中,我的默认编码是:
> Sys.getlocale("LC_CTYPE")
[1] "en_US.UTF-8"
而Rscript环境中的默认编码是:
$ Rscript -e 'Sys.getlocale("LC_CTYPE")'
[1] "C"
因此问题中的代码有以下(hacky)解决方案:
#!/usr/bin/Rscript
require(wordcloud)
require(tm)
require(XML)
Sys.setlocale("LC_CTYPE", "en_US.UTF-8") # <- Here
titles <- xpathSApply(htmlParse("http://www.lemonde.fr/rss/une.xml"),"//item/title",xmlValue)
titles <- gsub("[[:punct:]]"," ",titles)
rss <- Corpus(VectorSource(titles),readerControl=list(language="fr"))
rss <- tm_map(rss, stripWhitespace)
rss <- tm_map(rss, function(x)removeWords(x,stopwords("fr")))
tdm <- TermDocumentMatrix(rss)
m <- as.matrix(tdm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
png("/path/to/wordcloud.png",w=5,h=5,units="in",res=100)
par(mar=c(0,0,0,0))
wordcloud(d$word,d$freq,scale=c(3,.1),min.freq=2)
dev.off()
关于r - 通过 launchd 使用 Rscript 时的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25808595/
我的申请分为两部分。主要应用程序和辅助工具。辅助工具使用提升的权限执行任务。 launchd plist 如下所示:(仅包含重要设置。) UserName root ProgramArguments
只是想知道是否有人成功提交了应用程序或知道 Mac App Store 中存在使用 launchd 的应用程序。 谢谢。 最佳答案 有没有有什么办法可以直接向苹果询问这样的事情吗? 提交一个虚拟应用程
我将 launchd 配置为每天晚上 18 点在我的 mac pro 上启动命令,但它不起作用。 我想检查launchd是否运行了该命令。我尝试了系统控制台,没有发现任何有值(value)的东西。 我
我需要打开我的应用程序并在给定时间内自动从该应用程序运行特定任务。所以我在谷歌中搜索并找到了launchd。第一个问题,这是正确的选择吗? 我创建了一个 plist 并将其保存在位置 ~/Librar
在普通的 Cocoa 应用程序中,通常将所有保存的密码存储在钥匙串(keychain)中,从而避免许多陷阱。现在我正在编写一个 launchd 守护进程,它需要存储密码并在任何用户登录之前运行。这意味
我写了一个 plist 文件并将其放入/Library/LaunchDaemons Label com.dotcafe.DCDMySQLBackup ProgramArguments
我试图弄清楚为什么我的守护进程没有自动启动(在 Mac 10.8.3 上)。但是,它在其他机器上运行良好。这是我在/Library/LaunchDaemons/下的 plist L
我有一些来自Homebrew的launchd脚本。但是,当我重新启动计算机时,我必须手动运行它们: launchctl load -w ~/Library/LaunchAgents/com.mysql
我有一个包含一些工作的 plist 文件: Label StartScript Program /Users/ie54553/Desktop/script.s
我用 Homebrew 软件安装了 NGINX 然后我得到了信息并按照说明加载了 launchd plist $ brew info nginx nginx: stable 1.6.2, devel
我目前正在使用 plist 来运行 shell 脚本。 Label com.name.set
我有一个 Python 脚本,它使用 subprocess 来运行一个 AppleScript 来改变我的桌面背景。 launchd 会定期调用 bash 脚本来运行 Python 脚本。 当我从命令
有人有关于在 Xcode for iOS 中创建控制台工具的一些提示吗?我想通过 launchd 运行它,它应该向服务器发送请求。 但我找不到任何方法在 Xcode for ARM 中编译没有 UI
我有以下启动配置(存储在 acme.plist 中),我加载并开始使用 launchctl load acme.plist和 launchctl start acme.plist分别。
我正在尝试使用launchd每分钟执行一个脚本 我添加了一个新的 launchd 作业 plist,看起来像这样 Label com.bpstatusboard.omnifoc
我开始使用launchd并想要设置一个plist文件,这样每当我将SD卡插入我的Mac mini服务器(使用Snow Leopard Server)时,我都希望运行一个shell脚本(它应该复制所有j
通过 launchd 获得 root 权限的辅助工具无法建立到我的主程序的 NSConnection。 当我使用 sudo 手动启动 HelperTool 时,连接有效,这证明我的服务销售良好,并且问
我正在尝试编写一个小型 Cocoa 应用程序来帮助我管理时间,我希望它在启动时检查是否已经有 launchd 条目,如果没有,则为自己添加一个条目。 写入 launchd 文件的正确文件夹是什么,和/
是否可以知道加载到 launchctl 命令中的 .plist 文件位置? 标签名称与“launchctl list”一起列出,其内容可以通过“launchctl list LABEL”查看,但我找不
我想在登录时运行在后台运行的统一同步服务。但是我代理的状态码是78 .我不知道为什么,我尝试了一些在线发布的修复程序,但它不起作用。 有什么问题??下面是我的服务的 plist 文件。
我是一名优秀的程序员,十分优秀!