我试图在R
中调用一个系统命令,该命令调用对python脚本的调用(包括对pandas的导入),如下所示:
getwd()
[1] "/home/production"
> system("python In_tag_main_model/python_scripts/connect_to_couchbase.py")
Traceback (most recent call last):
File "In_tag_main_model/python_scripts/connect_to_couchbase.py", line 11, in <module>
import pandas as pd
ImportError: No module named pandas
在connect_to_couchbase.py
中,我调用了pandas,这是不被识别的,尽管当我在我的机器shell中运行这个确切的命令时:
production@va-rsrv01:~$ python In_tag_main_model/python_scripts/connect_to_couchbase.py
production@va-rsrv01:~$
它工作得很好,任何想法为什么system
不为我工作?
提前感谢!
看起来r system
函数正在执行不同的python可执行文件。您有三个选项来指定您想要的可执行文件:
-
你的绝对路径:
system("/anaconda2/bin/python In_tag_main_model/python_scripts/connect_to_couchbase.py")
-
通过
Sys.setenv
为你的进程设置PATH
变量(就像你所做的那样):Sys.setenv(PATH="/anaconda2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games") system("python In_tag_main_model/python_scripts/connect_to_couchbase.py")
-
使用新的
system2
函数,该函数提供了一个env
参数,可用于修改子进程的环境变量:system2("python", args="In_tag_main_model/python_scripts/connect_to_couchbase.py", env="PATH=/anaconda2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games")
请注意
system2
的调用约定与system
不同。