使用C#和python之间的管道发送和获取信号

如何解决使用C#和python之间的管道发送和获取信号

我用C#创建了管道服务器,而python将其连接。我用python创建一个csv文件,并通过管道将信号发送到C#代码。当我运行python代码时,创建csv文件及其标头。然后按f6键,然后开始填充csv文件值。用f7键停止填充。创建csv文件时,我使用管道发送消息,并且可以使用C#捕获此信号,但是我想在按f7键时捕获另一条消息而不是第一条消息。基本上,我更改了第一个信号变量值。它的名称是file_situation。当我按下f7键时,file_situation值的开头为b'Open',而file_situation的值必须更改为b'End'。当我尝试执行此操作时,出现OS错误:Invalid参数。我也无法使用C#捕获“结束”消息。因为当我尝试捕获“ End”信号时,第一个创建的信号“ Open”将作为参数发送给另一个函数。我应该连续阅读该信号。

我使用此事件使用C#创建服务器,并从python代码捕获消息。另外,我正在使用Thread连续捕获信号值。

private void Button1_Click(object sender,EventArgs e)
    {
        
        var server = new NamedPipeServerStream("NPtest");
        Console.WriteLine("Waiting for connection...");
        server.WaitForConnection();
        Console.WriteLine("Connected.");
        var br = new BinaryReader(server);
        var len = (int)br.ReadUInt32();            // Read string length
        var str = new string(br.ReadChars(len));

        plotThread = new Thread(() =>
        {
            while (true)
            {
                plotThread.Priority = ThreadPriority.Lowest;
                plotThread.IsBackground = true;
                StartReadingFile(str);

            }

        });

        plotThread.Start();
              
    }

这是StartReadingFile函数。我调用了另一个名为Readcsv的函数,并将管道信号作为参数发送。

 public void StartReadingFile(string file_situation)
    {
        LastCreatedFilePath read = new LastCreatedFilePath();
        Console.WriteLine(file_situation);
        if (file_situation != "End")
        {
            Console.WriteLine(read.NewPath);
            tempFilePath = read.NewPath;
            ReadCsv(tempFilePath,file_situation);
        }
        

        
    }

这是Python csv创建者代码管道。

f = open(r'\\.\pipe\NPtest','r+b',0)

file_situation = b'Open'
f.write(struct.pack('I',len(file_situation)) + file_situation)
f.seek(0)`

开始填充csv:

def start(key): #create csv file start condition also,it ends first listener to create file.

if key == keyboard.Key.f6:
    print('Exporting start...')
    return False # stop first listener for on_press

使用此功能填充csv结束。

def stop(key): #program stop condition. it actives when listener running condition breaks.

global temp_path1,file_situation
try:
    if key == keyboard.Key.f7:
        
        file_situation = b'End'
        f.write(struct.pack('I',len(file_situation)) + file_situation)
        f.seek(0)
        print ('Exporting stopped...')
        return False  

最后,我打算用'End'信号中断ReadCsv函数内部的while循环。

 if (file_situation == "End")
                    {
                        
                        Console.WriteLine("End of While!");
                        break;

                    }

如果您不理解,我可以更清楚地解释。谢谢您的时间。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com(将#修改为@)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?