Python:fork、pipe 和 exec

2023-11-26

我想在Python应用程序中执行一个程序,它将在后台运行,但最终会来到前台。

GUI 用于与其交互。但控制是通过标准输入和标准输出上的控制台提供的。我希望能够使用我的应用程序的 GUI 来控制它,所以我的第一个想法是:

  • Fork
  • 在父级中,dup2 stdin 和 stdout 以便访问它们
  • 执行孩子

这在 python 中很容易实现吗?如何实现?有没有其他方法可以实现我想要的目标,那会是什么?


首先是蟒蛇子流程模块是正确的答案。

作为子流程示例:

import subprocess
x = subprocess.check_output(["echo","one","two","three"])

其中 x 将是输出(python3 字节类:x.decode('utf-8')对于字符串)

请注意,这不会重复 stderr。如果您还需要 stderr,您可以执行以下操作:

x = subprocess.check_output(["bash","-c", 'echo foo; echo bar >&2'],stderr=subprocess.STDOUT)

当然,还有许多其他方法来捕获 stderr,包括捕获到不同的输出变量。

使用直接控制

但是,如果您正在做一些棘手的事情并且需要直接控制,请检查下面的代码:

import os
rside, wside = os.pipe()
if not os.fork():
    # Child

    os.close(rside)
    # Make stdout go to parent
    os.dup2(wside, 1)
    # Make stderr go to parent
    os.dup2(wside, 2)
    # Optionally make stdin come from nowhere
    devnull = os.open("/dev/null", os.O_RDONLY)
    os.dup2(devnull, 0)
    # Execute the desired program
    os.execve("/bin/bash",["/bin/bash","-c","echo stdout; echo stderr >&2"],os.environ)
    print("Failed to exec program!")
    sys.exit(1)

# Parent
os.close(wside)
pyrside = os.fdopen(rside)

for line in pyrside:
   print("Child (stdout or stderr) said: <%s>"%line)

# Prevent zombies!  Reap the child after exit
pid, status = os.waitpid(-1, 0)
print("Child exited: pid %d returned %d"%(pid,status))

Note: @初学者的回答在几个方面存在缺陷:包含了 os._exit(0) ,它立即导致子进程退出,使其他一切变得毫无意义。没有 os.execve() 使得问题的主要目标毫无意义。无法访问孩子的标准输出/标准错误作为另一个问题目标。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:fork、pipe 和 exec 的相关文章

  • 当我有自定义身份验证模型时,如何登录 Django Rest 可浏览 API?

    我有一个自定义用户模型 如下所示account models py from django contrib auth modles import AbstractUser from django db models signals impo
  • 如何避免使用 python 处理空的标准输入?

    The sys stdin readline 返回之前等待 EOF 或新行 所以如果我有控制台输入 readline 等待用户输入 相反 我想打印帮助并在没有需要处理的情况下退出并显示错误 而不是等待用户输入 原因 我正在寻找一个Pytho
  • 从文本文件中删除特定字符

    我对 Python 和编码都很陌生 我当时正在做一个小项目 但遇到了一个问题 44 1 6 23 2 7 49 2 3 53 2 1 68 1 6 71 2 7 我只需要从每行中删除第三个和第六个字符 或者更具体地说 从整个文件中删除 字符
  • 使用python查找txt文件中字母出现的次数

    我需要从 txt 文件中读取该字母并打印 txt 文件中出现的次数 到目前为止 我已经能够在一行中打印内容 但计数有问题 有人可以指导吗 infile open grades txt content infile read for char
  • 将 stdin/stdout 从执行进程重定向到 Perl 中的管道

    我试图让执行子进程中的 STDOUT STDERR 通过 Perl 中的管道返回到父进程 我见过的最接近我想做的事情是 http forums devshed com perl programming 6 exec and redirect
  • 将非常大的Python列表输出保存到mysql表中

    我想将 python 生成的列表的输出保存在 mysql 数据库的表中 该表如下所示 mysql 中的 myapc8 表 https i stack imgur com 4B4Hz png这是Python代码 在此输入图像描述 https
  • 将 numpy 数组合并为单个 int

    numpy 数组怎么可以这样 10 22 37 45 转换为单个 int32 数字 如下所示 10223745 这可以工作 gt gt gt int join map str 10 22 37 45 10223745 基本上你使用map s
  • 如何过滤 Pandas GroupBy 对象并获取 GroupBy 对象?

    当对 Pandas groupby 操作的结果执行过滤时 它返回一个数据帧 但假设我想执行进一步的分组计算 我必须再次调用 groupby 这似乎有点绕 有更惯用的方法吗 EDIT 为了说明我在说什么 我们无耻地从 Pandas 文档中窃取
  • Python Tkinter 模块不显示输出

    我正在尝试学习 Python 并尝试使用 Python 中的 GUI 并遇到了这个 Tkinter 模块 我的代码运行 但运行时窗口没有出现 我的代码如下 from Tkinter import to create a root windo
  • Python HMAC:类型错误:字符映射必须返回整数、None 或 unicode

    我在使用 HMAC 时遇到了一个小问题 运行这段代码时 signature hmac new key secret key msg string to sign digestmod sha1 我收到一个奇怪的错误 File usr loca
  • 使用 for 循环创建一系列元组

    我已经搜索过 但找不到答案 尽管我确信它已经存在了 我对 python 很陌生 但我以前用其他语言做过这种事情 我正在以行形式读取数据文件 我想将每行数据存储在它自己的元组中 以便在 for 循环之外访问 tup i inLine wher
  • 可以使用哪些技术来衡量 pandas/numpy 解决方案的性能

    Question 如何简洁全面地衡量下面各个功能的性能 Example 考虑数据框df df pd DataFrame Group list QLCKPXNLNTIXAWYMWACA Value 29 52 71 51 45 76 68 6
  • 使用 PIL 在 Tkinter 中显示动画 GIF

    我正在尝试制作一个程序来使用 Tkinter 显示动画 GIF 这是我最初使用的代码 from future import division Just because division doesn t work right in 2 7 4
  • 如何在亚马逊 EC2 上调试 python 网站?

    我是网络开发新手 这可能是一个愚蠢的问题 但我找不到可以帮助我的确切答案或教程 我工作的公司的网站 用 python django 构建 托管在亚马逊 EC2 上 我想知道从哪里开始调试这个生产站点并检查存储在那里的日志和数据库 我有帐户信
  • AWS Lambda 不读取环境变量

    我正在编写一个 python 脚本来查询 Qualys API 中的漏洞元数据 我在 AWS 中将其作为 lambda 函数执行 我已经在控制台中设置了环境变量 但是当我执行函数时 出现以下错误 module initialization
  • Django 管理器链接

    我想知道是否有可能 如果可以的话 如何 将多个管理器链接在一起以生成受两个单独管理器影响的查询集 我将解释我正在研究的具体示例 我有多个抽象模型类 用于为其他模型提供小型的特定功能 其中两个模型是DeleteMixin 和GlobalMix
  • 如何获取pandas中groupby对象中的组数?

    我想知道有多少个独特的组需要执行计算 给定一个名为 groupby 的对象dfgroup 我们如何找到组的数量 简单 快速 Pandaic ngroups 较新版本的 groupby API pandas gt 0 23 提供了此 未记录的
  • python从二进制文件中读取16字节长的双精度值

    我找到了蟒蛇struct unpack 读取其他程序生成的二进制数据非常方便 问题 如何阅读16 字节长双精度数出二进制文件 以下 C 代码将 1 01 写入二进制文件三次 分别使用 4 字节浮点型 8 字节双精度型和 16 字节长双精度型
  • 如何(安全)将 Python 对象发送到我的 Flask API?

    我目前正在尝试构建一个 Flask Web API 它能够在 POST 请求中接收 python 对象 我使用 Python 3 7 1 创建请求 使用 Python 2 7 运行 API 该 API 设置为在我的本地计算机上运行 我试图发
  • 用于插入或替换 URL 参数的 Django 模板标签

    有人知道 Django 模板标签可以获取当前路径和查询字符串并插入或替换查询字符串值吗 例如向 some custom path q how now brown cow page 3 filter person 发出请求 电话 urlpar

随机推荐

  • Notepad++ 正则表达式 -> newLine

    我使用 Notepad 我需要删除以 abc 开头的所有行 注意 我不需要将以 abc 开头的行替换为空行 但我需要完全删除这些行 我该如何继续 我想使用正则表达式 尝试更换 abc r n with nothing The 表示一行的开始
  • jQuery 动画回到原始位置

    我正在开发一个网站 其中有一些绝对定位的 div 我需要在单击时调整其大小 然后这些将填充 div 所在的容器 问题是如何让它们切换到去返回到原始位置 顶部 左侧 每个位置都不同 work item toggle toggle functi
  • 单例或类方法[重复]

    这个问题在这里已经有答案了 阅读完对某个问题的回复后question关于 Objective C 中的单例 似乎每个解决方案都在实例访问器中的线程方面做出了一些权衡 IE synchronized self if sharedInstanc
  • 不在对象上下文中时使用 $this - Laravel 4 PHP 5.4.12

    我试图使用变量 this 访问构造函数上的实例 在所有其他方法中 当我打电话时似乎效果很好 this gt event gt method 但在这个方法上它给我一个错误 不在对象上下文中时使用 this 我刚刚对这个问题进行了研究 我发现的
  • Java TLS 套接字:找不到受信任的证书

    让我快速解释一下我想要做什么 我正在尝试用 java 构建我自己的 Apple 推送通知服务 用于测试目的 该服务的工作得益于 TLS 套接字 我有一个 java 客户端来创建 TLS 套接字以向 APN 发送推送通知 我更改了主机 url
  • OUTER JOIN 结果缺少行,没有 WHERE 子句(已找到解决方法)

    更新在底部 我正在尝试执行自外连接 对于每个记录 返回它以及晚于它发生的所有其他记录 如果它本身是最新记录 则返回 NULL 这是我的sql代码 SELECT A CR A REGIS STATUSDATE B REGIS STATUSDA
  • 应用程序在 runTransitionForCurrentState 上崩溃,但不知道为什么

    我尝试过寻找这个 但没有运气 所以希望有一些大师可能知道答案 我在 iTunes Connect 中看到大量关于我的应用程序因特定堆栈跟踪而崩溃的报告 但堆栈跟踪没有显示任何有用的信息 0 Crashed main 0 UIKit 0x18
  • Hibernate 验证“无法初始化 javax.el.E​​xpressionFactory”错误

    我正在尝试使用休眠验证 代码可以编译 但是启动时失败并出现错误 Exception in thread main javax validation ValidationException HV000183 Unable to initial
  • Typescript 中的 React-Redux 连接问题

    我正在尝试制作一个传递给react redux的组件connect功能 组件如下 interface ITestProps id number class TestComponent extends React Component
  • 右边框渐变

    我正在尝试制作右边框 ul 元素为线性渐变 我尝试过以下但没有成功 webkit border image webkit linear gradient top FE2EF7 4AC0F2 0 0 5px 我正在使用 Chrome 非常感谢
  • C - “char var[]”和“char *var”之间的区别?

    我期望以下两个向量在 RAM 中具有相同的表示形式 char a var XXX x00 char p var XXX 但奇怪的是 调用类型的库函数f char argument 如果我使用以下方式调用它 则会破坏正在运行的应用程序f p
  • 如何在 PostgreSQL 中使用 RETURNING 和 ON CONFLICT?

    我在 PostgreSQL 9 5 中有以下 UPSERT INSERT INTO chats user contact name VALUES 1 2 3 2 1 NULL ON CONFLICT user contact DO NOTH
  • WinRT XAML 中 GridView 项目组内的垂直滚动

    我正在使用 GridView 在 WinRT XAML 应用程序中显示不同组的项目 一切都运行良好 除了 ItemsPanelTemplate 使用环绕网格 当空间不足时它会垂直堆叠我的项目 所以 我尝试使用 StackPanel 如下所示
  • Python 日志记录模块发出错误的时区信息

    我遇到了 Python 2 7 日志记录模块的问题 我的系统是Ubuntu 14 04 64bit 我住在意大利 目前UTC 1 无夏令时 系统已正确配置 我想在当前时区发出日志行 并包含正确的时区偏移信息 考虑以下片段 usr bin e
  • 如何使用 sscanf 解析逗号分隔字符串中的字段,同时支持空字段?

    我有一个逗号分隔的字符串 其中可能包含空字段 例如 1 2 4 使用基本的 sscanf string val1 val2 val3 val4 我获得了空字段之前的所有值 以及从空字段开始的意外结果 当我从 sscanf 中删除空字段的表达
  • 如何找出谁运行了 TFS 销毁命令?

    我有理由相信 TFS Destroy 命令在我的服务器上运行 TFS 是否提供了一种方法来查明是谁以及何时完成的 TFS 将所有用户启动的命令记录在数据库中 14 天 尝试连接到您的Tfs Collection数据库并运行以下查询 SELE
  • 修复了与 css 转换结合使用时附件背景图像在 chrome 中闪烁/消失的问题

    我目前正在做一个视差网站主题 背景图像需要固定地附加到某些 div 和 section 以避免 jquery 沉迷于一切 问题是在转换完成时 任何动画项目下方标签的背景图像都会消失 仅在 Google Chrome 上 补救 这是一个非常常
  • 使用 Ant 从命令行编译 NetBeans 项目

    我有一个 NetBeans 项目 想从命令行编译 StackOverflow 上还有许多其他关于如何执行此操作的问题 但它们解释了如何使用以下命令来编译项目javac src java 我没有更改 NetBeans 项目的构建设置 默认情况
  • 将 Oracle 10g CLOB 与 Grails 2.0.1 结合使用

    我正在开发一个使用 Oracle 10g 和 Grails v2 0 1 的项目 我尝试在 Domain 类中使用 CLOB 数据类型作为文本输入字段 但它似乎不起作用 我的第一次尝试是基于我读到的内容关于 GORM 这里 其中说要使用ty
  • Python:fork、pipe 和 exec

    我想在Python应用程序中执行一个程序 它将在后台运行 但最终会来到前台 GUI 用于与其交互 但控制是通过标准输入和标准输出上的控制台提供的 我希望能够使用我的应用程序的 GUI 来控制它 所以我的第一个想法是 Fork 在父级中 du