我看过this,这没什么帮助。如何获取一个程序的输出并将其用作另一个程序的输入?
我有一个Ruby程序,提出一个问题的cmd线,我想写一个Python程序,可以返回一个答案。有谁知道任何链接或一般我怎么会这样做呢?
感谢您的帮助。
编辑
多亏了提到管道的家伙。我没有太用它,很高兴它被提出来,因为它迫使我也更加注意它。
我看过this,这没什么帮助。如何获取一个程序的输出并将其用作另一个程序的输入?
我有一个Ruby程序,提出一个问题的cmd线,我想写一个Python程序,可以返回一个答案。有谁知道任何链接或一般我怎么会这样做呢?
感谢您的帮助。
编辑
多亏了提到管道的家伙。我没有太用它,很高兴它被提出来,因为它迫使我也更加注意它。
p = subprocess.Popen(['ruby', 'ruby_program.rb'], stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
ruby_question = p.stdout.readline()
answer = calculate_answer(ruby_question)
p.stdin.write(answer)
print p.communicate()[0] # prints further info ruby may show.
的最后两行可以做成一个:
print p.communicate(answer)[0]
Pexpect的
http://www.noah.org/wiki/Pexpect
Pexpect的是一个纯Python期望状 模块。 Pexpect使Python成为更好的 工具来控制其他 应用程序。
Pexpect是一个纯Python模块,用于产生子应用程序 ; 控制它们;并在其输出中响应 预期模式。 Pexpect像Don Libes的期待一样工作。 Pexpect允许您的脚本产生一个 子应用程序并控制它,就好像人类正在输入命令一样 。
+1:pexpect可以做到。 – nosklo 2009-01-21 14:21:32
有两种方法(关闭我的头顶)来做到这一点。如果你在Unix环境中最简单的方法就是使用管道。简单的例子:
cat .profile .shrc | more
这将第一命令(cat .profile .shrc
)的输出发送到使用管道字符|
的more
命令。
第二种方法是从源代码中调用另一个程序。我不知道Ruby如何处理这个问题,但在Python中,您可以运行程序并使用popen函数获取它的输出。有关示例代码,请参见this example chapter from Learning Python,然后按Ctrl-F以获得“popen”。
-1:使用管道意味着数据是单向的。他特意要求返回数据 – nosklo 2009-01-21 14:20:49
这就是为什么我给出两种可能的解决方案的原因之一。 – 2009-01-21 14:32:07
首先检查了这一点: [UNIX管道] [1]
它可以在Windows或UNIX,但它的性能稍微dufferent,第一方案:
question.rb:
puts "This is the question"
answer.rb:
question = gets
#calculate answer
puts "This is the answer"
然后命令行:
在UNIX:
question.rb | answer.rb
在窗口:
ruby question.rb | ruby answer.rb
输出:
This is the question
This is the answer
你可以只使用一种语言,但如果你坚持不知道Ruby知识,为什么不... – Keltia 2009-01-21 14:11:00