Python3子流程通信示例

Python3子流程通信示例,python,subprocess,pipe,communicate,Python,Subprocess,Pipe,Communicate,我不熟悉子流程 我只需要一个非常简单的win32示例,演示parent.py和child.py之间的communicate()。从parent.py发送到child.py的字符串,由child.py修改并从parent.py发送回parent.py以进行打印()。 我之所以发布这篇文章,是因为我发现的示例要么不是win32,要么没有使用子对象,这让我很困惑 感谢您的帮助。根据您的要求,这里有一个简单的示例。这个例子是Python3.x(2.x需要稍微修改) parent.py child.p

我不熟悉子流程

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

我之所以发布这篇文章,是因为我发现的示例要么不是win32,要么没有使用子对象,这让我很困惑


感谢您的帮助。

根据您的要求,这里有一个简单的示例。这个例子是Python3.x(2.x需要稍微修改)

parent.py child.py
我在Mac OS X上编写并测试了这个程序。这里没有特定于平台的代码,因此没有理由不能在Win32上运行。

感谢您的快速响应。它似乎不接受原始输入。可能是因为我使用的是python 3。我试图将其更改为input,但这引发了另一个错误“EOFError:EOF when reading a line”。好的,我将修改Python 3.x的示例。我似乎仍然得到。。。self.stdin.write(输入)。。。TypeError:必须是字节或缓冲区,而不是stry您将需要
p.communicate(s.encode())
,正如我上面所写的。这是因为Python3字符串是Unicode的,必须在写入管道之前进行编码(读取后进行解码)。需要刷新页面。非常感谢。不幸的是,我不能给你那么多的重复,但看起来你有很多:P
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())
s = input()
s = s.upper()
print(s)