将来自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()命令(位于子进程中)的输出并将其存储在变量中(也许将其返回给父进程)?

解决方法

使用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)