在R中使用subprocess库启动子进程遇参数传递问题
解决R中subprocess调用monetdb时参数失效的问题
问题出在你传递参数的方式上——你把create命令和mydb参数合并成了一个字符串传递,但subprocess库需要将每个命令/参数项单独作为数组元素。
正确的写法
你需要把create和mydb拆分成两个独立的元素传入参数数组:
handle <- spawn_process('/usr/local/bin/monetdb', c('create', 'mydb'))
为什么之前的写法不对?
当你传递c('create mydb')时,monetdb会把整个create mydb当作一个完整的命令名称来解析,而不是将create识别为命令、mydb识别为该命令的参数。这就相当于你在Shell里执行了:
monetdbd "create mydb"
而不是正确的:
monetdbd create mydb
所以程序找不到名为create mydb的命令,就输出了默认的用法提示。
额外调试技巧
如果你想确认进程的参数是否正确传递,可以用process_args()查看当前进程的参数列表:
process_args(handle)
正确的输出应该包含/usr/local/bin/monetdb、create、mydb这三个项。
另外,你之前尝试把create纳入路径的做法肯定行不通——路径指向的是可执行文件本身,命令和参数必须作为独立的参数传递,不能和可执行文件路径混在一起。
内容的提问来源于stack exchange,提问作者Claudio Brasser
相关产品推荐
相关产品推荐

