C#WPF应用程序和python脚本之间的双向通信

问题描述 投票:0回答:1

我正在尝试在c#应用程序和c#将调用的python脚本之间进行双向通信。

我在c#中有一些输入通道在高频率(5000-1000 data / s)下不断变化,让我们说一分钟。在这些输入的每次更改时,计算结果并将其分配给输出变量。我想要做的是将逻辑移动到python脚本。例如:

  • 输入:双x,y
  • 输出:双z

所以python脚本应该能够读取输入,执行逻辑并以类似的频率写入结果。

任何推荐?以前有人做过类似的事吗?

首先,我尝试在每次更改时调用脚本并读取控制台输出。但是脚本中的代码并不像z = x * y那么简单,并且pyhon脚本中需要存储值的变量。例如,脚本mught想要保存x和y达到的最大值。

我看过ZeroMQ库进行通信,不知道如何使用它。

c# python wpf zeromq netmq
1个回答
1
投票

这是一个解决方案:

简单的C#程序:发送数据和接收的客户端

using System;
using ZeroMQ;

namespace ZeroMQ_Client
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var requester = new ZSocket(ZSocketType.REQ))
            {
                // Connect
                requester.Connect("tcp://127.0.0.1:5555");

                for (int n = 0; n < 10; ++n)
                {
                    string requestText = "Hello";
                    Console.Write("Sending {0}...", requestText);

                    // Send
                    requester.Send(new ZFrame(requestText));

                    // Receive
                    using (ZFrame reply = requester.ReceiveFrame())
                    {
                        Console.WriteLine(" Received: {0} {1}!", requestText, reply.ReadString());
                    }
                }
            }
        }
    }
}

python程序,你必须安装pyzmq:

#
#   Hello World server in Python
#   Binds REP socket to tcp://*:5555
#   Expects b"Hello" from client, replies with b"World"
#

import time
import zmq

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")

while True:
    #  Wait for next request from client
    message = socket.recv()
    print("Received request: %s" % message)

    #  Do some 'work'
    time.sleep(1)

    #  Send reply back to client
    socket.send(b"World")
© www.soinside.com 2019 - 2024. All rights reserved.