当从R中调用Ubuntu上的python命令时,系统注释不会像在shell中一样工作



我试图在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/bi‌​n:/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/bi‌​n:/sbin:/bin:/usr/games")
    

    请注意system2的调用约定与system不同。

最新更新