Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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
Python 进程之间传递值的Pytonic方法_Python_Linux_Subprocess_Multiprocess - Fatal编程技术网

Python 进程之间传递值的Pytonic方法

Python 进程之间传递值的Pytonic方法,python,linux,subprocess,multiprocess,Python,Linux,Subprocess,Multiprocess,我需要一种简单的方法,使用多进程将子进程的标准输出作为列表传递给另一个函数: 调用子流程的第一个函数: def beginRecvTest(): command = ["receivetest","-f=/dev/pcan33"] incoming = Popen(command, stdout = PIPE) processing = iter(incoming.stdout.readline, "") lines = list(processing) return li

我需要一种简单的方法,使用多进程将子进程的标准输出作为列表传递给另一个函数:

调用子流程的第一个函数:

def beginRecvTest():

  command = ["receivetest","-f=/dev/pcan33"]
  incoming = Popen(command, stdout = PIPE)
  processing = iter(incoming.stdout.readline, "")
  lines = list(processing)
  return lines
应接收行的函数:

我读过关于使用队列的书,但我不认为这正是我需要的

名为的子进程返回无限数据,因此有些人建议使用tempfile,但我完全不知道如何做到这一点


目前,脚本只返回读取的第一行,所有循环beginRecvTest函数的工作都以编译错误结束。

listprocessing将在eof(很可能)之前不会返回,直到receivetest子进程结束。为什么在这里使用多重处理?代码看起来像是几个不相关片段的复制粘贴,而不了解每个片段应该做什么。问题的标题意味着您希望一次获得整个子流程的输出,例如,与subprocess.check_output类似,但尝试的解决方案建议您希望在子流程仍在运行时以增量方式读取输出。请参见,澄清:您是希望一次获取所有输出,还是希望在子进程仍在运行时逐行读取其输出?@J.F.Sebastian我希望能够在进程仍在运行时逐行读取输出您阅读了吗?您想对该行做什么?@J.F.Sebastian我想并行运行这两个函数,并将在beginRecvTest中读取的行传递给readByLine处理
 def readByLine(lines):

  i = 0
  while (i < len(lines)):
    system("clear")

    if(lines[i][0].isdigit()):
        line = lines[i].split()
        dictAdd(line)
    else:
        next


    print ; print "-" *80
    for _i in mydict.keys():
        printMsg(mydict, _i)

    print "Keys: ", ;  print mydict.keys()
    print ; print "-" *80
    sleep(0.3)
    i += 1
if __name__ == "__main__":

    dataStream = beginRecvTest()
    p = Process(target=dataStream)
    reader = Process(target=readByLine, args=(dataStream,))
    p.start()
    reader.start()