Python R:system()无法使用.bashrc中定义的bash函数

Python R:system()无法使用.bashrc中定义的bash函数,python,r,bash,configuration,path,Python,R,Bash,Configuration,Path,问题 我的默认Python是2.7,但我有一个脚本需要Python 3.4。我试图在R中创建一个函数,该函数将: 切换到Python 3.4 运行此脚本 切换回Python 2.7 将结果导入到R 为了在Python版本之间切换,我使用集群的“dotkit”系统,如下所示: use Python-2.7 use Python-3.4 “use”是在my.bashrc文件中导入的bash函数。它设置我的所有路径变量(path、LIBRARY\u path、LD\u LIBRARY\u path、

问题

我的默认Python是2.7,但我有一个脚本需要Python 3.4。我试图在R中创建一个函数,该函数将:

  • 切换到Python 3.4
  • 运行此脚本
  • 切换回Python 2.7
  • 将结果导入到R
  • 为了在Python版本之间切换,我使用集群的“dotkit”系统,如下所示:

    use Python-2.7
    use Python-3.4
    
    “use”是在my.bashrc文件中导入的bash函数。它设置我的所有路径变量(path、LIBRARY\u path、LD\u LIBRARY\u path、CPATH、C\u INCLUDE\u path等)。问题是,当我尝试在R中调用此函数时,会出现以下错误:

    system('use Python-3.4')
    sh: use: command not found
    
    这似乎是我人生道路上的一个问题。我使用的是正确的外壳:

    system('echo $SHELL')
    /bin/bash
    
    我的$PATH变量看起来也不错。但是,当我创建一个基本上执行相同操作的脚本时:

    加载_py34.sh:

    #!/bin/bash
    source ~/.bashrc
    use Python-3.4
    
    并通过R调用这个脚本,然后它实际运行,但由于某种原因,它不会在R中更改我的python版本(我已经验证了这个脚本可以从命令行运行)

    所以我有点困惑,但如果有人能帮忙,我会非常感激


    建议的修复方法

    当我将它们组合到一个命令中时,仍然存在相同的问题:

    > system("sh load_py34.sh; python --version")
    Prepending: Python-3.4 (already loaded)
    Python 2.7.1
    
    当我尝试直接调用bash时,路径仍然存在问题:

    > system("bash -c 'use Python-3.4; python --version'")
    bash: use: command not found
    Python 2.7.1
    
    调用
    system()
    时,它使用
    /bin/sh
    ,而不是
    /bin/bash
    sh
    启动时不会读取
    .bashrc
    文件,因此它不知道您在其中定义的任何函数

    要使用
    .bashrc
    中的函数,您必须获得
    bash
    来运行它:

    system("bash -c 'use Python-3.4; python --version'") 系统(“bash-c‘使用Python-3.4;Python--version’”)
    编辑:结束单引号的位置。

    当我在一次调用中合并它们时,我会得到相同的错误。我将更新问题以反映这一点。这给了我相同的错误(请参阅更新的问题)。 system("bash -c 'use Python-3.4; python --version'")