【问题标题】:Python3 subprocess communicate examplePython3子进程通信示例
【发布时间】:2012-01-28 23:32:00
【问题描述】:

我是子处理的新手。

我只需要 parent.pychild.py 之间的通信()的一个非常简单的 win32 示例。从 parent.py 发送到 child.py 的字符串,由 child.py 更改并从 parent.py 发送回 parent.py 以进行 print()。

我发布这个是因为我发现的示例最终要么不是 win32,要么没有使用让我感到困惑的孩子。

感谢您的帮助。

【问题讨论】:

    标签: python subprocess pipe communicate


    【解决方案1】:

    这是一个根据您的要求的简单示例。此示例是 Python 3.x(2.x 需要稍作修改)。

    parent.py

    ​​>
    import subprocess
    import sys
    
    s = "test"
    p = subprocess.Popen([sys.executable, "child.py"],
                         stdin=subprocess.PIPE,
                         stdout=subprocess.PIPE)
    out, _ = p.communicate(s.encode())
    print(out.decode())
    

    child.py

    ​​>
    s = input()
    s = s.upper()
    print(s)
    

    我在 Mac OS X 上编写并测试了它。这里没有特定于平台的代码,所以没有理由它也不能在 Win32 上运行。

    【讨论】:

    • 感谢您的快速响应。它似乎不接受 raw_input。可能是因为我使用的是 python 3。我试图将其更改为输入,但这引发了另一个错误 'EOFError: EOF when reading a line'。
    • 好的,我将修改 Python 3.x 的示例。
    • 我似乎仍然得到... self.stdin.write(input) ... TypeError: must be bytes or buffer, not str
    • 你需要p.communicate(s.encode()),就像我上面写的那样。这是因为 Python 3 字符串是 Unicode 并且必须在写入管道之前进行编码(并在读取之后进行解码)。
    • 啊,我现在明白了。需要刷新页面。太感谢了。不幸的是我不能给你那么多的代表,但看起来你有很多:P
    猜你喜欢
    • 2020-07-04
    • 2011-08-25
    • 2017-04-15
    • 2011-08-28
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多