Python subprocess.Popen管道自定义fd

Python subprocess.Popen管道自定义fd,python,subprocess,Python,Subprocess,我目前有以下代码,可以在上下文中使用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, shel

我目前有以下代码,可以在上下文中使用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,因为我正在使用subprocess来运行一个在文件描述符26上输出的命令

我见过除了stdout或stderr之外的其他fd的代码,但没有从自定义fd读取的代码。
那么,如何从subprocess.Popen通过管道传输自定义fd呢?

因为我需要一个答案,下面是一个迟来的答案:

为了在Python中实现,我提出了以下代码:

导入操作系统,子流程
读取管道,写入管道=os.pipe()
xproc=subprocess.Popen(['Xephyr','-displayfd',str(write_pipe)],
通过\u fds=[写入\u管道])
display=os.read(read\u pipe,128).strip()
我认为
os.dup2(write\u pipe,26)
Popen
构造函数与
pass\u fds=[26]
组合之前,将完成获取特定fd编号的最后一步,而不仅仅是
os.pipe
选择的任何内容,但我还没有测试它


如果没有别的,如果在调用实际的目标命令之前,使用
subprocess.Popen
调用运行
exec 26>$whicher的shell脚本包装器,应该可以将fd 26重定向到写入管道的任何地方。

我不明白您想做什么:您想直接访问stdout/stderr的fd吗?或者您是否需要访问由子进程创建的新fd?如果是,您正在运行哪种类型的cmd,您能否向cmd提供新的fd?你是在特定的平台上跑步吗<代码>子流程
在windows/unix上的行为不同。。。