首页 > 解决方案 > 将 exec 进程中的标准输出存储到变量中

问题描述

我目前有以下代码os.execv()用于执行某种过程。例如:

process_param = [exec_path, f]
pid = os.fork(                      
try:
   if (pid > 0):
      #parent 
      time_lim = 55
      for _ in range(time_lim):
         child_pid, status = os.waitpid(-1, os.WNOHANG)

         if (child_pid != 0):
            break

         time.sleep(1)
        
   elif (pid == 0):
      os.execv(exec_path, process_param)
   else:
      status = 1
except ChildProcessError:
   status = 1

在你告诉我使用之前subprocess,请注意(出于分配目的),我应该坚持这种通过 Python 运行 bash 命令的特殊方法。

我想做类似的事情:

var_a=`cat some_file`

有谁知道我如何捕获从os.execv()命令派生的输出(位于子进程中)并将其存储在变量中(也许将其返回给父进程)?

标签: pythonpython-exec

解决方案


使用os.pipeos.dup2您可以从https://docs.python.org/3/library/os.html#os.dup2了解更多信息。

import os
import sys

r, w = os.pipe()
pid = os.fork()
if pid:
    # parent
    os.close(w)
    r = os.fdopen(r)
    print(r.read())
    sys.exit(0)
else:
    # child
    os.close(r)
    # duplicate stdout and stderr to parent
    os.dup2(w, 1)
    os.dup2(w, 2)
    os.execv('/usr/bin/ls', ['-l'])
    sys.exit(0)

推荐阅读