Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
while循环中的Python管道_Python_Python 3.x - Fatal编程技术网

while循环中的Python管道

while循环中的Python管道,python,python-3.x,Python,Python 3.x,我试图编写一个分散的工具,跟踪运行该代码的其他计算机的IP,以探索分散。问题在于从子流程到主程序的管道信息。我编写了一个较小的程序来模拟这个问题。第一个代码段是主进程,它启动子进程并侦听管道中的流量。第二段是使用print()将数据发送回主进程的子进程。但数据从未到达 # main process from subprocess import Popen, PIPE listener = Popen(['python3', 'a.py'], stdout=PIPE, stderr=PIPE) i

我试图编写一个分散的工具,跟踪运行该代码的其他计算机的IP,以探索分散。问题在于从子流程到主程序的管道信息。我编写了一个较小的程序来模拟这个问题。第一个代码段是主进程,它启动子进程并侦听管道中的流量。第二段是使用print()将数据发送回主进程的子进程。但数据从未到达

# main process
from subprocess import Popen, PIPE
listener = Popen(['python3', 'a.py'], stdout=PIPE, stderr=PIPE)
i = 1
while i == 1:
    stdout, stderr = listener.communicate()
    print(stdout)
子流程:

# subprocess "a.py"
from time import sleep
i = 1
while i == 1: 
    sleep(1)
    print('new:192.168.2.24', flush=True)
    print('new:192.168.2.24', flush=True)
等待进程终止。来自文档(我的)

与进程交互:向stdin发送数据。从stdout和stderr读取数据,直到到达文件末尾等待进程终止并设置returncode属性。可选输入参数应该是要发送给子进程的数据,如果不应该发送数据给子进程,则为None。如果以文本模式打开流,则输入必须是字符串。否则,它必须是字节

你会想直接阅读

print(listener.stdout.readline())