Python 可以从 Windows Powershell 命名管道中读取吗?

Posted

技术标签:

【中文标题】Python 可以从 Windows Powershell 命名管道中读取吗?【英文标题】:Can Python read from a Windows Powershell namedpipe? 【发布时间】:2013-12-22 05:38:54 【问题描述】:

我在 Windows Powershell 中创建了以下命名管道。

# .NET 3.5 is required to use the System.IO.Pipes namespace
[reflection.Assembly]::LoadWithPartialName("system.core") | Out-Null
$pipeName = "pipename"
$pipeDir = [System.IO.Pipes.PipeDirection]::InOut
$pipe = New-Object system.IO.Pipes.NamedPipeServerStream( $pipeName, $pipeDir )

现在,我需要一些 Python 代码 sn-p 从上面创建的命名管道中读取。 Python可以做到吗?

提前致谢!

【问题讨论】:

你试过 Python 中的data = open(r'\\.\pipe\pipename', 'rb', 0).read() 吗? 感谢 J.F,但我的 powershell namedpipe 等待连接,当我开始 .read() 操作时,namedpipe 不知何故被关闭。是否还有其他东西而不是 read(),例如 connect() 或其他东西,以便我最初建立连接,然后执行读写操作。如果我错了,请纠正我 相关:Named Pipes between C# and Python 谢谢 J.F 我现在可以使用了。非常感谢。我将复制下面运行良好的那个 【参考方案1】:

礼貌:http://jonathonreinhart.blogspot.com/2012/12/named-pipes-between-c-and-python.html

这是 C# 代码

using System;
using System.IO;
using System.IO.Pipes;
using System.Text;
class PipeServer

    static void Main()
    
        var server = new NamedPipeServerStream("NPtest");

        Console.WriteLine("Waiting for connection...");
        server.WaitForConnection();

        Console.WriteLine("Connected.");
        var br = new BinaryReader(server);
        var bw = new BinaryWriter(server);

        while (true)
        
            try
            
                var len = (int)br.ReadUInt32();            // Read string length
                var str = new string(br.ReadChars(len));    // Read string

                Console.WriteLine("Read: \"0\"", str);

                //str = new string(str.Reverse().ToArray());  // Aravind's edit: since Reverse() is not working, might require some import. Felt it as irrelevant

                var buf = Encoding.ASCII.GetBytes(str);     // Get ASCII byte array     
                bw.Write((uint)buf.Length);                // Write string length
                bw.Write(buf);                              // Write string
                Console.WriteLine("Wrote: \"0\"", str);
            
            catch (EndOfStreamException)
            
                break;                    // When client disconnects
            
        
    

这是 Python 代码:

import time
import struct

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

while True:
    s = 'Message[0]'.format(i)
    i += 1

    f.write(struct.pack('I', len(s)) + s)   # Write str length and str
    f.seek(0)                               # EDIT: This is also necessary
    print 'Wrote:', s

    n = struct.unpack('I', f.read(4))[0]    # Read str length
    s = f.read(n)                           # Read str
    f.seek(0)                               # Important!!!
    print 'Read:', s

    time.sleep(2)

将 C# 代码转换为 .ps1 文件。

【讨论】:

以上是关于Python 可以从 Windows Powershell 命名管道中读取吗?的主要内容,如果未能解决你的问题,请参考以下文章

poj1730 - Perfect Pth Powers(完全平方数)(水题)

CF1312C Adding Powers

codeforces 955C - Sad powers

Codeforces 955C Sad powers (数论)

Codeforces 955C Sad powers(数论)

2022-12-14:给定一个正数n, 表示从0位置到n-1位置每个位置放着1件衣服 从0位置到n-1位置不仅有衣服,每个位置还摆着1个机器人 给定两个长度为n的数组,powers和rates pow