如果可能的话,如何使用 os.execv() 使用管道和重定向?

2024-01-02

我从用户那里获取命令和参数,解析它们并将它们传递给os.execvp(),像这样:

> ps -a -u -x

cmd = "ps"
args = ["-a", "-u", "-x"]
os.execvp(cmd, args)

问题是这不适用于管道或重定向,因此这样的方法不起作用:

> ps -a -u -x > output.txt

cmd = ps
args = ["-a", "-u", "-x", ">", "output.txt"]
os.execvp(cmd, args)

我明白我的问题是> and output.txt不是以下参数ps,我只是不知道解决这个问题的最佳方法。我希望我只是缺少正确的方法。


With os.execv我们处于操作系统的低级别。

要重定向输出,我们需要替换文件描述符 no。 1 (stdout) 在执行命令之前。

import os

STDOUT = 1

fdout = os.open('output.txt', os.O_WRONLY)
os.dup2(fdout, STDOUT)
os.execvp('ps', 'ps -a -u -x'.split())
# not reached
os._exit(127) # just for the case of execv failure

使用管道连接两个进程需要更多工作。管道有两端,必须首先创建。然后fork将重复该过程。每个进程必须关闭管道的一端,并将另一端分别重定向到其 stdin 或 stdout。

import os

STDIN = 0 
STDOUT = 1 

pipein, pipeout = os.pipe()
if os.fork():
    # parent
    os.close(pipeout)
    os.dup2(pipein, STDIN)
    os.execlp('wc', '-l')
    # not reached
    os._exit(127)
else:
    # child
    os.close(pipein)
    os.dup2(pipeout, STDOUT)
    os.execvp('ps', 'ps -a -u -x'.split())
    # not reached
    os._exit(127)

这些只是概念的示例。

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

如果可能的话,如何使用 os.execv() 使用管道和重定向? 的相关文章

  • Pandas 中的索引如何工作?

    我是Python新手 这似乎是一个需要问的基本问题 但我真的很想了解这里发生了什么 import numpy as np import pandas as pd tempdata np random random 5 myseries on
  • (Python) 我应该使用参数还是将其设为全局参数? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有许多共享相同参数的函数 他们将多次输入和输出该参数 例如 a foo a fun a a bar a def fun a return a
  • 使用 Celery 时出现错误消息“无法找到记录器“多处理”的处理程序”

    RabbitMQ http en wikipedia org wiki RabbitMQ现在似乎工作正常 然而 当我尝试 python m celery bin celeryd loglevel INFO 常规的celeryd不起作用 我收
  • Pandas groupby:根据另一列中的值更改一列中的值

    我会尽力解释我的问题 但我是 Pandas 新手 所以请耐心等待 我有一个 Pandas 数据框df Random ID Seq ID Type Seq Token 0 8 1 User First 1 8 2 Agent Second 2
  • 在Langchain中,为什么ConversationalRetrievalChain不记住聊天记录并为每个聊天输入新的ConversationalRetrievalChain链?

    我正在尝试使用 langchain 创建一个客户支持系统 我通过 TextLoader 使用文本文档作为外部知识提供者 为了记住聊天 我使用 ConversationalRetrievalChain 和聊天列表 我的问题是 每次执行时con
  • 如何使用Python从pdf文件中删除页面?

    我有一些超过 500 页的 pdf 文件 但每个文件中只需要几页 有必要保留文档的标题页 我确切地知道程序应该删除的页数 如何使用安装在 MS Visual Studio 上的 Python 2 7 环境来完成此操作 尝试使用PyPDF2
  • 意外的缩进错误,但缩进看起来正确

    我一直在尝试运行此代码 但它引发了缩进错误 无论我尝试什么 结果都是一样的 如果我删除之前的缩进def str self 和代码的其余部分 它工作正常 但在输出时 它不显示问题 而是显示 问题对象 def str self Indentat
  • 加快 pandas groupby 中的滚动总和计算

    我想按组计算大量组的滚动总和 但我很难快速地完成它 Pandas 内置了滚动和展开计算器的方法 这是一个例子 import pandas as pd import numpy as np obs per g 20 g 10000 obs g
  • 将 Python 脚本导入另一个脚本?

    我正在阅读 Zed Shaw 的 艰难学习 Python 正在学习第 26 课 在本课中 我们必须修复一些代码 这些代码从另一个脚本调用函数 他说我们不必导入它们来通过测试 但我很好奇我们将如何做到这一点 课程链接 http learnpy
  • 如何在 PyCharm 社区版中运行 Django 项目的调试服务器?

    有人在 PyCharm 社区版中为 Django 项目设置调试配置时遇到问题吗 IDE 的社区版缺少项目设置中的项目类型选项 然后当我设置 调试 或 运行配置 时 它会要求我提供应该运行的脚本 Django 需要什么脚本 manage py
  • rpy2 传递 python 保留关键字参数

    我试图通过 python 使用 r 的密度函数 并且必须将 from to 参数传递给密度函数 然而 由于 from 这个词是Python中的保留关键字 我该如何实现这一点呢 谢谢 这是到目前为止的代码 r density robjects
  • 动态组装 Python 模块,动态导入

    我正在努力让自己熟悉importlib钩子 我想实现直接导入用其他语言编写的非Python文件并维护源映射的能力 因此提高SyntaxError带有行号的 s 仍然会给出有意义的堆栈跟踪 我加载外部文件的方法是组装 Pythonic 源代码
  • 使用 Python 访问 MP3 音乐数据

    我正在尝试编写一个 Python 脚本 用于使用歌曲的数据作为比较的基础来搜索重复的 mp3 4 文件 我的情况涉及许多文件名相似但 ID3 标签不同的 mp3 4 文件 起初 我尝试循环并使用 md5 来查找重复文件 忽略文件名 当然 当
  • 有一些 numpy.map 吗?

    我可能在这里遗漏了一些明显的东西 但我遗漏了一个功能numpy map 这与 Python 的相同map函数 但将输出收集在numpy大批 例如 我可以有一个图像生成器genImage i 生成 2D 图像 大小 m n 基于单个输入 我想
  • 如何获取 Flask 中当前的基本 URI? [复制]

    这个问题在这里已经有答案了 在下面的代码中 我想将 URL 存储在变量中以检查发生 URL 错误的错误 app route flights methods GET def get flight flight data mongo db fl
  • PyCrypto:生成受 DES3 密码保护的 RSA 密钥

    我已经能够使用 DES3 创建受密码保护的 RSA 密钥 嗯 I think因为我对这个加密世界非常陌生 使用以下命令 openssl genrsa out tmp myKey pem passout pass f00bar des3 20
  • 使用 Keras 时,验证集中未见的类别会出现错误

    我有由数值变量和分类变量组成的数据 分类变量有很多类别 因此我使用嵌入来表示这些类别 我的模型是一个简单的神经网络 我知道当你定义嵌入层时你需要通过input dim number of categories 1为了解释训练中看不见的类别
  • 使用 cv2 在 python 中创建多通道零垫

    我想用 cv2 opencv 包装器在 python 中创建一个多通道 mat 对象 我在网上找到了一些例子 其中 c Mat zeros 被 numpy zeros 替换 这看起来不错 但似乎没有多通道类型适合 看代码 import cv
  • 在 Python 中将主题标头添加到 server.sendmail()

    我正在编写一个 python 脚本来从终端发送电子邮件 在我目前发送的邮件中 它没有主题 我们如何为此电子邮件添加主题 我当前的代码 import smtplib msg From email protected cdn cgi l ema
  • Django ALLOWED_HOSTS 与 CORS(django-cors-headers)

    ALLOWED HOSTS 和 CORS 之间有什么区别 如果我定义了 ALLOWED HOSTS 我还需要定义 CORS 吗 我没有使用 django 模板 我也有可能动态定义这两个吗 我认为没有 我使用 django 作为后端 并在不同

随机推荐

  • Office 365 Rest API - 守护程序周身份验证

    我正在尝试建立一个Ruby用于访问 Office 365 Rest API 的守护程序服务 最近可以通过 OAuth client credentials 流程来做到这一点 如本博客文章所述 https learn microsoft co
  • 为没有 ZeroMQ 绑定的语言创建 IPython 的语言内核

    有some http andrew gibiansky com blog ipython ipython kernels 有趣的描述 https stackoverflow com questions 22782028 ipython la
  • OpenGL ES 2.0 中许多具有不同纹理的对象

    我是 OpenGL ES 2 0 的新手 它具有可编程管道 并且我正在移植使用不同纹理渲染许多对象的应用程序 那么这将需要为每个对象调用 glDrawArrays 并在调用之间更改纹理 或者还有另一种方法可以通过单个 glDrawArray
  • 沿着一列将 DataFrame 从长到宽重塑

    我正在寻找一种将下面的表 A 显示重新配置为表 B 的方法 Table A type x1 x2 x3 A 4 6 9 A 7 4 1 A 9 6 2 B 1 3 8 B 2 7 9 转化为表B type x1 x2 x3 x1 x2 x3
  • UTF-8 与 UTF-16 和 UTF-32 转换混淆

    我对将 unicode 字符转换为十六进制值感到有点困惑 我正在使用这个网站来获取字符的十六进制值 https www branah com unicode converter https www branah com unicode co
  • 如何授予自己对本地 SQL Server 实例的管理员访问权限?

    我将 SQL Server 2008 R2 安装到本地计算机上 但是 由于权限 或缺乏 我无法创建新数据库 创建数据库权限被拒绝 因此 我尝试将管理员权限分配给我当前的登录名 用户无权执行此操作 我还尝试创建一个具有管理员权限的新登录名 但
  • 在 macOS Mojave 上的 Mac App Store 中打开开发者页面

    新的 Mac App Store 提供了一个开发者页面 我想从我的应用程序中链接到此页面 怎么能做到这一点呢 我知道我可以打开单个应用程序 Mac App Store 甚至显示了 复制链接 选项 但开发人员页面没有此选项 这可能吗 我终于弄
  • Axios post 为对象添加额外的键

    我尝试用 axios 发布一个对象 我需要它的格式如下 var dataObj username username password password data1 data1 当我在后端使用 axios 和 catch 发布它时 它会向对象
  • 计算向量中每 n 个值的平均值

    假设我有一个向量 a lt rnorm 6000 我想计算第 1 个值到第 60 个值的平均值 然后再次计算第 61 个值到第 120 个值的平均值 依此类推第四个值 所以基本上我想计算每 60 个值的平均值 从而从该向量中得到 100 个
  • 在编辑器中保存然后刷新浏览器快捷方式命令

    我想要一个热键来在 Notepad 中保存全部 然后切换到浏览器并刷新页面 我每天必须这样做数千次 并执行 全部保存 热键 然后按 Alt Tab 到右侧窗口 然后按 F5 一次又一次地刷新 一定有更好的解决方案吗 如果有其他编辑器可以做到
  • Python将音频添加到视频opencv

    我使用 python cv2 模块将 jpg 帧加入视频中 但无法向其中添加音频 是否可以在没有 ffmpeg 的情况下在 python 中向视频添加音频 附 抱歉我的英语不好 使用ffpyplayer来处理音频部分 import cv2
  • Java 泛型的转换很奇怪[重复]

    这个问题在这里已经有答案了 我正在使用java 8 我最近遇到了这个 public class Test public static void main String args String ss Test
  • 如何修复或纠正 IntelliJ Idea 中的“默认文件模板”警告

    IntelliJ理念 2016 1 Windows 10 专业版 当我在新项目中创建新项目或新类时 IntelliJ 会帮助包含一个包含我的姓名和日期的默认标头 但是 它还会突出显示代码并显示有关使用 默认文件模板 的文件的警告 它建议了两
  • 如何禁用“href”属性的默认 行为?

    我有一个像这样的简单侧边栏 div class sidebar ul class nav li class Page1 a href Page1 html Page1 a li li class Page2 a href Page2 htm
  • 如何列出迄今为止正在使用或创建的所有 Hive 数据库?

    如同SHOW TABLES命令 我们是否有这样的命令来列出迄今为止创建的所有数据库 这一页 https cwiki apache org confluence display Hive LanguageManual DDL提到命令SHOW
  • Django 中的 GraphQL 查询返回 None

    我正在尝试在 django 中使用 graphQL 查询 基本上我有两个应用程序 一个是我的 api 应用程序 其中包含进行查询所需的所有内容 另一个是 前端 应用程序 我从中调用 api 来使用这些查询 我可以使用 GraphQL 视图在
  • 用于大型数组的 php in_array 的替代方案,以避免重复条目

    我需要生成一个从 600k 到 2000k 的大量随机数列表 但是 列表不能有重复项 我当前的 实现 如下所示
  • 最近 6 笔付款

    我需要从仅包含以下内容的模式中获取最后六笔付款 贡献 ID 到期日 数量 付款持续了 7 年 我只需要获取最新的最后六笔付款 我认为这会做到这一点 因为它遵循我的 sql SELECT TOP 6 ID customerInfo IVACO
  • MVC 5 + $Post() 函数在服务器上托管后不起作用

    我用MVC5开发了一个应用程序 调用下面代码中视图上的链接的 Onclick Code in View File post ControllerName FunctionName this is your url id image func
  • 如果可能的话,如何使用 os.execv() 使用管道和重定向?

    我从用户那里获取命令和参数 解析它们并将它们传递给os execvp 像这样 gt ps a u x cmd ps args a u x os execvp cmd args 问题是这不适用于管道或重定向 因此这样的方法不起作用 gt ps