gpt4 book ai didi

Python subprocess.Popen 管道自定义 fd

转载 作者:行者123 更新时间:2023-12-01 15:43:30 24 4
gpt4 key购买 nike

我目前有这段代码在上下文之后通过管道传输 stdout 或 stderr:

def execteInstruction(cmd, outputNumber):
do_stdout = DEVNULL
do_stderr = DEVNULL
if outputNumber != 2:
do_stdout = subprocess.PIPE
else:
do_stderr = subprocess.PIPE
return subprocess.Popen(cmd, shell=True, stderr=do_stderr, stdout=do_stdout)

然后我使用 communicate() 读取结果。除了我需要读取自定义 fd 之外,这非常有效,因为我正在使用子进程来运行在文件描述符 26 上输出的命令。

我见过写入另一个 fd 而不是 stdout 或 stderr 的代码,但没有看到从自定义 fd 读取的代码。那么如何从 subprocess.Popen 中通过管道传递自定义 fd?

最佳答案

因为我需要这个问题的答案,这里有一个迟来的答案给其他人:

实现a similar use of additional fds在 Python 中,我想出了这段代码:

import os, subprocess

read_pipe, write_pipe = os.pipe()
xproc = subprocess.Popen(['Xephyr', '-displayfd', str(write_pipe)],
pass_fds=[write_pipe])

display = os.read(read_pipe, 128).strip()

我认为 os.dup2(write_pipe, 26)Popen 构造函数与 pass_fds=[26] 结合之前会完成最后一步为您提供特定的 fd 编号,而不仅仅是 os.pipe 选择的任何编号,但我还没有测试过。

如果不出意外,如果您使用 subprocess.Popen 调用一个 shell 脚本包装器,应该可以将 fd 26 重定向到任何 write_pipe 结果是在调用实际目标命令之前运行 exec 26>$WHATEVER

关于Python subprocess.Popen 管道自定义 fd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40328559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com