我看過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