Python有这样一个方便的构造:
def do_stuff():
whatever
if __name__ == "__main__":
do_stuff(()因此,如果该文件是从带有python foo.py或./foo.py的命令行和适当的shebang行运行的,那么__name__变量将被设置为__main__,并且该文件以脚本的形式运行。但是,您也可以从交互式shell或其他python代码中执行from foo import do_stuff,并在那里运行do_stuff。然后,相同的脚本文件充当模块而不是脚本。
我可以在littler脚本中做类似的事情吗?就像foo.R是:
#!/bin/env r
do_stuff = function(){
whatever
}
if(?run as r command_line?){
do_stuff()
}然后我可以使用source("foo.R"),这将定义do_stuff (在我的默认全局环境中,但我们将稍微忽略这一点)。
一个可能的关键是在运行在_ (设置为脚本名)的环境中存在littler,但是更强大的东西可能更好。
发布于 2014-10-09 12:25:39
像这样的事情应该有效:
#!/usr/local/bin/r --vanilla
doStuff <- function(print_me) {
print(print_me)
}
if (!interactive()) {
if (exists("argv")) {
if (!is.null(argv) && length(argv)>0) {
doStuff(argv[1])
}
}
}https://stackoverflow.com/questions/26277637
复制相似问题