如何将Python进程的输出重定向到Rust进程?

2024-05-23 16:49:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从Python程序中生成一个Rust进程,并将Python的标准输出重定向到标准输入。我使用了以下功能:

process = subprocess.Popen(["./target/debug/mypro"], stdin=subprocess.PIPE)

并尝试使用以下命令写入子进程:

^{pr2}$

我没有得到任何错误,但在Rust中的标准输入似乎不需要任何输入,而且标准输出根本没有打印任何内容。在

以下是我当前运行的Rust代码的版本:

^{3}$

Tags: debug命令程序功能target标准进程stdin
2条回答

默认情况下,process.stdin.write(str.encode(json.dumps(dictionnaire[str(index)]))不添加换行符,因此在Rust方面,我从未到达在read_line上生成进程块的行的末尾。在

手动添加可以使一切顺利进行。在

process.stdin.write(str.encode(json.dumps(dictionnaire[str(index)])+ "\n") )

这可能是Python方面的一个问题

subprocess.run(["cargo run   " + str(r)], shell=True)

这假设您有一个在forkexec之间保持打开状态的数字文件描述符。生成进程可能会关闭文件描述符,因为它们被标记为CLOEXEC,或者由于在exec之前显式的清理代码。在

在尝试将数值文件描述符作为字符串参数传递之前,应确保它们在新进程中保持有效。在

更好的方法是使用一些进程派生API,它允许您显式地将新进程中的文件描述符映射到打开的句柄,或者使用一个API来生成一个stdin/out绑定到管道的进程。在

相关问题 更多 >