python - R: system() 不能使用 .bashrc 中定义的 bash 函数

标签 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”是一个导入到我的 .bashrc 文件中的 bash 函数。它设置了我所有的路径变量(PATH、LIBRARY_PATH、LD_LIBRARY_PATH、CPATH、C_INCLUDE_PATH 等)。问题是,当我尝试在 R 中调用此函数时,出现以下错误:
    system('use Python-3.4')
    sh: use: command not found
    

    这似乎是我的 PATH 的问题。我正在使用正确的 shell :
    system('echo $SHELL')
    /bin/bash
    

    我的 $PATH 变量看起来也不错。但是,当我创建一个基本上执行相同操作的脚本时:

    load_py34.sh:
    #!/bin/bash
    source ~/.bashrc
    use Python-3.4
    

    并通过 R 调用此脚本,然后它实际运行,但由于某种原因,它不会更改我在 R 中的 Python 版本。(我已验证此脚本可从命令行运行。)
    > R
    > system('python --version')
    Python 2.7.1
    > system('sh load_py34.sh')
    Prepending: R-3.4 (ok)
    > system('python --version')
    Python 2.7.1
    

    所以我有点困惑,但如果有人可以提供帮助,我将不胜感激。

    建议修复

    当我将它们组合成一个命令时,我仍然遇到同样的问题:
    > system("sh load_py34.sh; python --version")
    Prepending: Python-3.4 (already loaded)
    Python 2.7.1
    

    当我尝试直接调用 bash 时,我仍然遇到 PATH 问题:
    > 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 '使用 Python-3.4; python --version'")

    编辑:关闭单引号的位置。

    关于python - R: system() 不能使用 .bashrc 中定义的 bash 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46673627/

    相关文章:

    python - 使用 Cython distutils 时如何删除文档字符串?

    目录名称中的 bash 空格使用 find 导致 ls 中的换行符

    perl - 转义嵌套 shell/perl 脚本中的空格

    linux - 在 bash 中评估字符串中的空格时的奇怪行为

    python - 启动 os.walk,不带主目录名

    python - 创建一个包含 pandas 数据框中多列的所有非空值的单列

    r - 在 R 中编写自定义函数,该函数采用带单位的输入向量

    r - Shiny -为什么要更改 tabpanel 的顺序,tabPanel 不显示绘图?

    r - 在 R 中生成随机整数对而不进行替换

    python - 如何从pandas df中的每一行中创建新列