使用管道在两个匿名python脚本之间传递数据

时间:2009-06-29 10:15:32

标签: python windows pipe

在Windows命令行中考虑这一点。

scriptA.py | scriptB.py

我想通过pickle将scriptA.py中的字典对象发送到scriptB.py:将其发送并通过管道发送。但我不知道如何做到这一点。

我在这里阅读了一些关于这个主题的帖子,但通常会有这些答案:

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

但我实际上并不知道“scriptA.py”的名称。我只是想抓住ready管道对象并发送/接收数据缓冲区。

我已经尝试了sys.stdout / stdout,但是我得到了文件描述符错误,并且基本上没有尝试过那条轨道。

这个过程很简单:

scriptA.py:

  • (1)Pickle / Serialize dictionary into stringbuffer
  • (2)通过管道发送stringbuffer

scriptB.py

  • (3)从管道接收字符串缓冲区
  • (4)将stringbuffer unpickle / Deserialize into dictionary

3 个答案:

答案 0 :(得分:7)

当你对shell说这个时

scriptA.py | scriptB.py

shell将它们与管道连接起来。你什么都不做,而且效果很好。

scriptA.py写入sys.stdout的所有内容都转到scriptB.py

scriptB.py从sys.stdin读取的所有内容都来自scriptA.py

他们已经联系了。

那么,如何将字典从A中的stdout传递到B中的stdin?

  1. PicklescriptA.py将字典转储到stdout。 scriptB.py从stdin加载字典。

  2. JSONscriptA.py将字典转储到stdout。 scriptB.py从stdin加载字典。

  3. 这已经内置到Python中,只需要很少的代码。

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

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

答案 1 :(得分:2)

管道只将A的stdout放入B的stdin。

A确实:

import sys
sys.stdout.writelines(output)

B就是这样:

import sys
input = sys.stdin.readlines()

答案 2 :(得分:0)

当你输送东西时,你(通常)将一个程序的标准输出送入另一个程序的标准输入。我认为你应该继续尝试这条道路。

如果您无法用第二个脚本读取第一个脚本的输出,请查看this question