问题描述
我目前有以下代码,据此我使用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.pipe
和os.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)