python - 将 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.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)
推荐阅读
- oracle - Oracle - 控制文件(如果列长度 > 3,则在其他表中加载数据)
- python - 如何让 Pylint 在 coc.nvim 中显示代码气味?(重构问题)
- javascript - 如何使用两个地图功能和两个获取 url
- pandas - Pandas 使用通配符左右剥离字符
- visual-studio-code - 如何在 VS Code 中定义折叠自定义语言代码的开始和结束?
- mongodb - mongorestore 的 nsInclude 参数无效
- flutter - 如何在flutter gcloud.storage中公开文件?
- javascript - 使用客户端javascript检查注册表项的存在
- java - KafkaIO with BootStrapServers
- reactjs - 使用 React Router 处理“找不到页面”