为了账号安全,请及时绑定邮箱和手机立即绑定

两个进程实时读写同一个文件

两个进程实时读写同一个文件

Go
心有法竹 2023-02-21 19:14:22
我有一个用例,其中一个运行 python 的进程将其执行日志写入一个文件。Goilang 中运行的另一个进程,想要实时读取文件的内容,例如日志流。但是为了读取文件的内容,似乎我必须等到 Python 进程完成。有没有办法让 python 进程正常终止,最后生成日志文件,并将日志流式传输到 golang 进程?我的目的是让python进程日志流到golang进程。
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

1. 简单的


如果您使用的是 Linux,则将日志从 Python 写入标准输出并使用管道。来源.py | 目标(用go写的)


package main


import (

"bufio"

"fmt"

"os"

)


/*

 Three ways of taking input

   1. fmt.Scanln(&input)

   2. reader.ReadString()

   3. scanner.Scan()


   Here we recommend using bufio.NewScanner

*/


func main() {

// To create dynamic array

arr := make([]string, 0)

scanner := bufio.NewScanner(os.Stdin)

for {

    fmt.Print("Enter Text: ")

    // Scans a line from Stdin(Console)

    scanner.Scan()

    // Holds the string that scanned

    text := scanner.Text()

    if len(text) != 0 {

        fmt.Println(text)

        arr = append(arr, text)

    } else {

        break

    }


}

// Use collected inputs

fmt.Println(arr)

}

用法:


echo "what a wanderful world" |./go-bin 

另请阅读此Python redirect to StdOut


2.权利。


对于长时间运行的进程,使用命名管道可能更好。这是一个 linux 文件 (FIFO) GNU pipe。


Python 写入此文件,Golang 读取 go 中的 FIFO 示例


3. 可能矫枉过正。


编写 Golang Web 服务器并从 python 调用服务器端点。


如果可以更改 Python 源代码。


此解决方案还应更加关注安全性。


查看完整回答
反对 回复 2023-02-21
  • 1 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号