我看过这个,并没有太大帮助。
我有一个向 cmd 行提出问题的 Ruby 程序,我想编写一个可以返回答案的 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]
如果您使用的是 unix / linux,则可以使用管道:
question.rb | answer.py
然后 question.rb 的输出变成 answer.py 的输入
我最近没有尝试过,但我感觉同样的语法也可以在 Windows 上运行。
期待
http://www.noah.org/wiki/Pexpect
Pexpect 是一个纯 Python 的类 expect 模块。Pexpect 使 Python 成为控制其他应用程序的更好工具。
Pexpect 是一个用于生成子应用程序的纯 Python 模块;控制它们;并响应其输出中的预期模式。Pexpect 的工作方式类似于 Don Libes 的 Expect。Pexpect 允许您的脚本生成子应用程序并控制它,就好像人类正在键入命令一样。
首先检查一下:[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
有两种方法(在我脑海中)可以做到这一点。如果您在 Unix 环境中,最简单的方法是使用管道。简单的例子:
cat .profile .shrc | more
这会将第一个命令 ( cat .profile .shrc
) 的输出发送到more
使用管道字符的命令|
。
第二种方法是在源代码中从另一个程序调用一个程序。我不知道 Ruby 是如何处理这个问题的,但是在 Python 中,您可以运行一个程序并使用 popen 函数获取它的输出。请参阅Learning Python 中的此示例章节,然后使用 Ctrl-F 表示“popen”以获取一些示例代码。