2024-05-23 16:49:05 发布
网友
我试图从Python程序中生成一个Rust进程,并将Python的标准输出重定向到标准输入。我使用了以下功能:
process = subprocess.Popen(["./target/debug/mypro"], stdin=subprocess.PIPE)
并尝试使用以下命令写入子进程:
我没有得到任何错误,但在Rust中的标准输入似乎不需要任何输入,而且标准输出根本没有打印任何内容。在
以下是我当前运行的Rust代码的版本:
默认情况下,process.stdin.write(str.encode(json.dumps(dictionnaire[str(index)]))不添加换行符,因此在Rust方面,我从未到达在read_line上生成进程块的行的末尾。在
process.stdin.write(str.encode(json.dumps(dictionnaire[str(index)]))
read_line
手动添加可以使一切顺利进行。在
process.stdin.write(str.encode(json.dumps(dictionnaire[str(index)])+ "\n") )
这可能是Python方面的一个问题
subprocess.run(["cargo run " + str(r)], shell=True)
这假设您有一个在fork和exec之间保持打开状态的数字文件描述符。生成进程可能会关闭文件描述符,因为它们被标记为CLOEXEC,或者由于在exec之前显式的清理代码。在
fork
exec
CLOEXEC
在尝试将数值文件描述符作为字符串参数传递之前,应确保它们在新进程中保持有效。在
更好的方法是使用一些进程派生API,它允许您显式地将新进程中的文件描述符映射到打开的句柄,或者使用一个API来生成一个stdin/out绑定到管道的进程。在
默认情况下,
process.stdin.write(str.encode(json.dumps(dictionnaire[str(index)]))
不添加换行符,因此在Rust方面,我从未到达在read_line
上生成进程块的行的末尾。在手动添加可以使一切顺利进行。在
这可能是Python方面的一个问题
这假设您有一个在
fork
和exec
之间保持打开状态的数字文件描述符。生成进程可能会关闭文件描述符,因为它们被标记为CLOEXEC
,或者由于在exec
之前显式的清理代码。在在尝试将数值文件描述符作为字符串参数传递之前,应确保它们在新进程中保持有效。在
更好的方法是使用一些进程派生API,它允许您显式地将新进程中的文件描述符映射到打开的句柄,或者使用一个API来生成一个stdin/out绑定到管道的进程。在
相关问题 更多 >
编程相关推荐