我看过this并没有多大帮助。
我有一个Ruby程序,它向cmd行提出一个问题,我想编写一个可以返回答案的Python程序。有没有人知道任何链接或一般我怎么会这样做?
感谢您的帮助。
编辑
感谢那些提到 pipe 的人。我没有太多地使用它,并且很高兴它被提起,因为它迫使我更多地了解它。
答案 0 :(得分: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]
答案 1 :(得分:4)
如果你在unix / linux上,你可以使用管道:
question.rb | answer.py
然后,question.rb的输出成为answer.py
的输入我最近没有尝试过,但我觉得同样的语法也适用于Windows。
答案 2 :(得分:3)
Pexpect的
http://www.noah.org/wiki/Pexpect
Pexpect是一种纯粹的Python期望 模块。 Pexpect使Python变得更好 控制其他的工具 应用
Pexpect是一个纯Python模块 产卵儿童应用; 控制他们;并回应 预期的产出模式。 Pexpect就像Don Libes的Expect一样。 Pexpect允许你的脚本产生一个 孩子申请并控制它好像 一个人在输入命令。
答案 3 :(得分:3)
首先检查一下: [Unix管道] [1]
它可以在windows或unix上运行,但是它非常不同,首先是程序:
question.rb:
puts "This is the question"
answer.rb:
question = gets
#calculate answer
puts "This is the answer"
然后是命令行:
在unix中:
question.rb | answer.rb
在Windows中:
ruby question.rb | ruby answer.rb
输出:
This is the question
This is the answer
答案 4 :(得分:1)
有两种方法(在我的头顶)做到这一点。如果您在Unix环境中最简单的方法是使用管道。简单的例子:
cat .profile .shrc | more
这将使用管道符cat .profile .shrc
将第一个命令(more
)的输出发送到|
命令。
第二种方法是在源代码中调用另一个程序。我不知道Ruby如何处理这个问题,但是在Python中你可以运行一个程序并使用popen函数得到它的输出。有关示例代码,请参阅this example chapter from Learning Python,然后按Ctrl-F查看“popen”。