Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用os.system()或subprocess()通过Python运行Rscript_Python_Windows_Command Line_Rscript - Fatal编程技术网

使用os.system()或subprocess()通过Python运行Rscript

使用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

我在使用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"
但我一直在使用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')