5

我看过这个,并没有太大帮助。

我有一个向 cmd 行提出问题的 Ruby 程序,我想编写一个可以返回答案的 Python 程序。有谁知道任何链接或一般来说我可能会如何去做?

谢谢你的帮助。

编辑
感谢提到管道的人。我没有过多地使用它,很高兴它被提出来,因为它迫使我更多地关注它。

4

5 回答 5

10
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]
于 2009-01-21T14:12:23.970 回答
4

如果您使用的是 unix / linux,则可以使用管道:

question.rb | answer.py

然后 question.rb 的输出变成 answer.py 的输入

我最近没有尝试过,但我感觉同样的语法也可以在 Windows 上运行。

于 2009-01-21T14:05:22.923 回答
3

期待

http://www.noah.org/wiki/Pexpect

Pexpect 是一个纯 Python 的类 expect 模块。Pexpect 使 Python 成为控制其他应用程序的更好工具。

Pexpect 是一个用于生成子应用程序的纯 Python 模块;控制它们;并响应其输出中的预期模式。Pexpect 的工作方式类似于 Don Libes 的 Expect。Pexpect 允许您的脚本生成子应用程序并控制它,就好像人类正在键入命令一样。

于 2009-01-21T14:08:51.043 回答
3

首先检查一下:[Unix 管道][1]

它适用于 Windows 或 unix,但有点不同,首先是程序:

问题.rb:

puts "This is the question"

答案.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
于 2009-01-21T14:12:50.707 回答
1

有两种方法(在我脑海中)可以做到这一点。如果您在 Unix 环境中,最简单的方法是使用管道。简单的例子:

cat .profile .shrc | more

这会将第一个命令 ( cat .profile .shrc) 的输出发送到more使用管道字符的命令|

第二种方法是在源代码中从另一个程序调用一个程序。我不知道 Ruby 是如何处理这个问题的,但是在 Python 中,您可以运行一个程序并使用 popen 函数获取它的输出。请参阅Learning Python 中的此示例章节,然后使用 Ctrl-F 表示“popen”以获取一些示例代码。

于 2009-01-21T14:08:57.423 回答