小编ano*_*ose的帖子

Python 连接套接字到进程

我有一个用 C 编写的(非常)简单的 Web 服务器,我想测试它。我编写了它,以便它在标准输入上获取数据并在标准输出上发送出去。如何将套接字(使用 socket.accept() 创建)的输入/输出连接到使用 subprocess.Popen 创建的进程的输入/输出?

听起来很简单,对吧?杀手是这样的:我运行的是Windows。

有人可以帮忙吗?

这是我尝试过的:

  1. 将客户端对象本身作为 stdin/out 传递给 subprocess.Popen。(尝试总是没有坏处的。)
  2. 将 socket.makefile() 结果作为 stdin/out 传递给 subprocess.Popen。
  3. 将套接字的文件号传递给 os.fdopen()。

另外,如果问题不清楚,这是我的代码的精简版本:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('', PORT))
sock.listen(5)
cli, addr = sock.accept()
p = subprocess.Popen([PROG])
#I want to connect 'p' to the 'cli' socket so whatever it sends on stdout
#goes to the client and whatever the client sends goes to its stdin.
#I've tried:
p = subprocess.Popen([PROG], stdin = cli.makefile("r"), stdout = cli.makefile("w")) …
Run Code Online (Sandbox Code Playgroud)

python sockets windows process

6
推荐指数
1
解决办法
2135
查看次数

什么是创建无法在其板条箱外实例化的零大小结构的惯用方法?

我有类似的东西:

mod private {
    // My crate
    pub struct A;
    
    impl A {
        pub fn new() -> Self {
            Self
        }
        // ...
    }
}

fn main() {
    // External code
    let obj = private::A::new();
    let obj2 = private::A;
}
Run Code Online (Sandbox Code Playgroud)

目前,A不需要存储任何内部状态来执行我想要的操作(它只是在枚举中用作占位符),因此我将其设为零大小的结构。然而,这在未来可能会改变,所以我想防止这个板条箱外的代码在A没有通过A::new()的情况下实例化(即obj2in的实例化main()应该失败)。

从本质上讲,我想要的效果就像我向 中添加了一个私有字段一样A,但我希望它保持零大小。

目前,我正在考虑这样的事情:

pub struct A {
    empty: (),
}
Run Code Online (Sandbox Code Playgroud)

或这个:

pub struct A(());
Run Code Online (Sandbox Code Playgroud)

但是,我不确定哪种方式最惯用。

idioms rust

6
推荐指数
1
解决办法
128
查看次数

为什么总是避免使用C/C++中的多维数组进行数值计算?

在数值计算中,我们经常处理矩阵和张量,但是当我们用C/C++编写代码时,为什么我们总是使用一维数组来表示矩阵和张量?为什么我们不能使用多维数组呢?显然,多维数组更方便,就像在Matlab中一样.多维数组是否会花费太多内存?谢谢你的任何解释.

PS:我正在读一本数值计算代码.三指数张量T(i,j,k)总是由一维阵列T [1]表示,其中l = i + jI + kIJ(IJK分别是指数ijk的维度).我想知道我是否可以在三维数组T [i] [j] [k]中写出张量?

c c++ arrays multidimensional-array

0
推荐指数
1
解决办法
2210
查看次数

标签 统计

arrays ×1

c ×1

c++ ×1

idioms ×1

multidimensional-array ×1

process ×1

python ×1

rust ×1

sockets ×1

windows ×1