Python R:system()无法使用.bashrc中定义的bash函数
问题 我的默认Python是2.7,但我有一个脚本需要Python 3.4。我试图在R中创建一个函数,该函数将: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、
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'")