2009-06-29 73 views
1

請在windows命令行中考慮這一點。使用管道在兩個匿名python腳本之間進行數據通信

scriptA.py | scriptB.py 

我想通過pickle發送一個字典對象從scriptA.py到scriptB.py,並通過管道發送它。但我不知道如何做到這一點。

我讀過關於這個問題在這裏的一些帖子,但通常有沿着這些線路的答案:

Popen("scriptA.py"´, ..., and so on) 

但我真的不知道「scriptA.py」的名稱。我只想掌握準備好的管道對象併發送/接收databuffer。

我試過sys.stdout /標準輸出,但我得到文件描述符錯誤,基本上還沒有嘗試過這個賽道很遠。

的過程很簡單:

scriptA.py:

  • (1)味酸/串行字典成的StringBuffer
  • (2)發送的StringBuffer超過管

scriptB。 py

  • (3)從管
  • (4)Unpickle /反序列化StringBuffer接受的StringBuffer到字典

回答

7

當你說這對殼

scriptA.py | scriptB.py 

殼將它們與管相連。你什麼都不做,而且完美。

一切,scriptA.py寫入sys.stdout的去scriptB.py

一切,scriptB.py從sys.stdin讀取scriptA.py

他們已經連接來了。

那麼,你如何將字典從A中的stdout傳遞到B中的stdin?

  1. PicklescriptA.py將字典轉儲到標準輸出。 scriptB.py從stdin加載字典。

  2. JSONscriptA.py將字典轉儲到標準輸出。 scriptB.py從stdin加載字典。

這已經內置到Python中,並且只需要很少的代碼。

在SCRIPTA,json.dump({}, sys.stdout)pickle.dump({}, sys.stdout)

在scriptB,json.load(sys.stdin)pickle.load(sys.stdin)

+2

如果他在Windows上並且Python正被「文件關聯」(a.py | b.py)調用,而不是直接引用Python可執行文件(python a.py | python b.y)或例如(\ python26 \ python a.py | \ python26 \ python) - 就像他說的,你會得到關於「無效文件描述符」的黑暗嘟mut;它是Windows cmd.exe中長期存在的錯誤。另一位提問者幾分鐘前才提出這個問題。 – 2009-06-29 11:15:56

2

管道正好將A的標準輸出到標準輸入B的

甲的作用:

import sys 
sys.stdout.writelines(output) 

B只是:

import sys 
input = sys.stdin.readlines() 
0

當你管道的東西,你(通常)餵養一個程序的標準輸出到另一個的標準輸入。我認爲你應該繼續嘗試這條道路。

如果您在第二次閱讀第一個腳本的輸出時遇到問題,請查看this question

相關問題