使用os.system()或subprocess()通过Python运行Rscript
我在使用os.system()或SUBSPROCESS()通过Python运行Rscript时遇到问题 使用os.system()通过python运行命令通常对我来说很好(例如使用gdalwarp.exe),但对Rscript.exe则不行 我能看到的唯一区别是路径中的空格 在CMD窗口中,通过将路径放在引号中,可以很容易地避免路径中的空格问题。 执行以下命令成功使用os.system()或subprocess()通过Python运行Rscript,python,windows,command-line,rscript,Python,Windows,Command Line,Rscript,我在使用os.system()或SUBSPROCESS()通过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
"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'])
有人知道我做错了什么吗?
提前感谢,,
艾克在对这样一个简单的问题发疯之后。我决定将RStatistics重新安装到没有空格或点的路径,如:
C:/R/bin/Rscript.exe
现在
子进程调用([“C:/R/bin/Rscript.exe”,“D:/otsu_Script.R”])
或
os.system(“C:/R/bin/Rscript.exe D:/otsu\u Script.R”)
工作正常。
两天前就该试过了
。。。但是现在我还是一个快乐的猴子:-)现在可能太晚了,我看到你解决了这个问题,但是我遇到了一个类似的问题(虽然是在Linux系统中),它现在可能会帮助其他人;在python内部调用此命令时,该命令不起作用,尽管它直接在终端/命令行上工作
os.system("R CMD BATCH ./read_lengths_batch.R")
我尝试了许多解决方案,包括子流程
和其他解决方案,但发现比这更简单。在我的例子中,我知道在Windows中可能会有所不同,我只需要在调用结束时添加一个&
,它就可以在后台运行了。不知何故,它似乎会关闭与Python脚本,而不是做它的工作
os.system("R CMD BATCH ./read_lengths_batch.R &")
奇怪的是,如果在我的文件夹中,我用扩展名.txt
复制同一个文件:read\u length\u batch.R
和read\u length\u batch.txt
,它也能工作
希望它能帮助别人 调用外部程序的正确方法是使用
子进程
。那么这个解决方案有什么问题吗?subprocess命令应该可以工作system
使用cmd/c命令行
,因此将整个命令行用引号括起来,例如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”“)
或子进程.call([r'C:/…script.r')
。