首页 > 解决方案 > 子进程不执行 Rscript

问题描述

我需要从 Python 运行 Rscript 并等待它完成。据我所知,subprocessos.system(command).

这是我当前的代码:

import subprocess
command = "Rscript myscript.r -f 1"
subprocess.call([command])
# run some Python code

它给了我以下错误消息:

FileNotFoundError:[Errno 2] 没有这样的文件或目录:'Rscript myscript.r -f 1'

只是提到os.system(command)效果很好,但它没有等到脚本myscript.r完成。

标签: pythonsubprocesspython-os

解决方案


command是命令,而不是命令。传入command包含 1 个元素的列表会尝试"Rscript myscript.r -f 1"作为命令运行。

拆分为参数(手动,也允许传递包含空格的参数)是最好的方法:

subprocess.call(["Rscript","myscript.r","-f","1"])

os.system请注意,它与(除了os.system1)不安全 2)不处理引用大致相同)

所以它不会等待命令完成。在 Windows 上,我们可以尝试使用前缀cmd /c来避免该命令分离:

subprocess.call(["cmd","/c","Rscript","myscript.r","-f","1"])

推荐阅读