我的应用程序可使用从控制台提供的所有类型的Shell命令(FontAttributes
,FontFamily
,curl
等)。现在,我想使用date
通过交互式shell命令(如mongo shell)来介绍这种情况。
例如第一步,连接到mongodb:
ping
然后执行任意数量个命令,获取每一步的结果
os/exec
然后
mongo --quiet --host=localhost blog
我尝试了以下操作,但是它使每个mongo连接只能执行一个命令:
db.getCollection('posts').find({status:'INACTIVE'})
有没有一种方法可以运行多个命令,从而获得每个执行命令的标准输出结果?
答案 0 :(得分:1)
正如Flimzy所指出的,您绝对应该使用mongo驱动程序来与mongo一起使用,而不要尝试通过shell exec与之交互。
但是,要回答根本问题,您当然可以执行多个命令-没有理由不这样做。每次您写入流程的stdin时,就好像您在终端上键入它一样。除了专门检测是否已将它们连接到TTY的进程外,对此没有任何秘密限制。
尽管您的代码有几个问题-您绝对应该查看os/exec
package documentation。您正在呼叫myString = string.Format(myString, "123", "55668878", "test address");
,该呼叫:
启动指定的命令并等待其完成。
然后调用cmd.Run
,该调用也将等待命令完成。即使这是一个非常序列化的过程,也要在goroutine中写入stdin管道:您想要写入管道以执行命令,获取结果,编写另一个命令,获取另一个结果...并发性只会使混乱很重要,不应该在这里使用。而且,您不会发送换行符来告诉Mongo您已经完成了编写命令的过程(就像您在Shell中所做的一样-Mongo不会在您输入结束括号后立即开始执行,而是必须按Enter键)
您要通过stdin / stdout与进程进行交互的操作(再次,请注意,这绝对不是与数据库进行交互的方式,但是可以 >对其他外部命令有效):
cmd.Wait