【问题标题】:Running Rscript via Python using os.system() or subprocess()使用 os.system() 或 subprocess() 通过 Python 运行 Rscript
【发布时间】:2015-04-15 09:22:10
【问题描述】:

我在使用 os.system() 或 subprocess() 通过 Python 运行 Rscript 时遇到问题。

使用 os.system() 通过 python 运行命令对我来说通常很好(例如使用 gdalwarp.exe),但不适用于 Rscript.exe。

我能看到的唯一区别是路径中的空格。

通过将路径放在引号中,可以在 CMD 窗口中轻松克服路径中的空格问题。 执行如下命令成功。

"C:/Program Files/R/R-3.0.2/bin/Rscript.exe" "D:/.../otsu_Script.R"

但我被 Python 困住了。 到目前为止我用 python 尝试了什么:

os.system("C:/Program Files/R/R-3.0.2/bin/Rscript.exe" "D:/.../otsu_Script.R")
os.system(r"C:/Program Files/R/R-3.0.2/bin/Rscript.exe" "D:/.../otsu_Script.R")
os.system(r'"C:/Program Files/R/R-3.0.2/bin/Rscript.exe" "D:/.../otsu_Script.R"')
subprocess.call([r'C:/Program Files/R/R-3.0.2/bin/Rscript.exe', r'D:/.../otsu_Script.R'])

有人看到我做错了吗? 提前致谢, 艾克

【问题讨论】:

  • 调用外部程序的正确方法是使用subprocess。那么这个解决方案有什么问题呢?
  • 子进程命令应该可以工作。 system 使用 cmd /c commandline,因此将整个命令行用引号括起来,例如os.system('""C:/Program Files/R/R-3.0.2/bin/Rscript.exe" "D:/.../otsu_Script.R""')。正斜杠在这里起作用,因为参数被引用(即正斜杠不会被解释为开关),所以不需要r"raw string"
  • 抱歉,os.system('""C:/....script.R""')subprocess.call([r'C:/....script.R') 都无法正常工作。

标签: python windows command-line rscript


【解决方案1】:

现在可能为时已晚,我已经看到您解决了这个问题,但是我遇到了类似的问题(尽管在 Linux 系统中),现在它可能对其他人有所帮助;尽管它直接在终端/命令行上运行,但在 python 中调用此命令时不起作用。

os.system("R CMD BATCH ./read_lengths_batch.R")

我尝试了许多解决方案,包括subprocess 和其他解决方案,但发现它比这更容易。就我而言,我知道它在 Windows 中可能会有所不同,我只需要在调用结束时添加一个 & 即可使其在后台运行。不知何故,R 似乎会因为 Python 脚本而关闭,而不是执行它的工作。

os.system("R CMD BATCH ./read_lengths_batch.R &")

奇怪的是,如果在我的文件夹中复制相同的文件并带有 .txt 扩展名:read_lengths_batch.Rread_lengths_batch.txt,它也可以工作。

希望它对某人有所帮助!

【讨论】:

    【解决方案2】:

    在对这样一个简单的问题进行了思考之后。我决定将 RStatistics 重新安装到没有空格或点的路径,例如: C:/R/bin/Rscript.exe

    现在 subprocess.call(["C:/R/bin/Rscript.exe", "D:/otsu_Script.R"] )os.system("C:/R/bin/Rscript.exe D:/otsu_Script.R") 工作正常。 两天前应该试过了……

    ...但现在我还是一只快乐的猴子:-)

    【讨论】:

      猜你喜欢
      • 2021-12-15
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 2018-02-12
      • 2014-09-18
      • 2020-11-03
      相关资源
      最近更新 更多