在 Python 中通过管道传输到脚本时无法启动交互式程序

2023-12-10

我有一个 python 脚本需要调用定义的$EDITOR or $VISUAL。当单独调用 Python 脚本时,我可以启动$EDITOR没有任何问题,但是当我将某些内容传输到 Python 脚本时,$EDITOR无法启动。现在,我正在使用 nano,它显示

收到 SIGHUP 或 SIGTERM

每次。看来是同一个问题此处描述.

sinister:Programming [1313]$ echo "import os;os.system('nano')" > "sample.py" 
sinister:Programming [1314]$ python sample.py
# nano is successfully launched here.
sinister:Programming [1315]$ echo "It dies here." | python sample.py 
Received SIGHUP or SIGTERM

Buffer written to nano.save.1

编辑:澄清;在程序内部,我没有通过管道发送给编辑器。代码如下:

editorprocess = subprocess.Popen([editor or "vi", temppath])
editorreturncode = os.waitpid(editorprocess.pid, 0)[1]

当您通过管道将某些内容传输到进程时,管道将连接到该进程的标准输入。这意味着您的终端输入不会连接到编辑器。大多数编辑器还会检查他们的标准输入是否是终端(isatty),而管道则不然;如果它不是终端,他们将拒绝启动。如果是nano,这似乎会导致它退出并显示您包含的消息:

% echo | nano
Received SIGHUP or SIGTERM

如果您希望能够将其标准输入传递到基于终端的编辑器,则需要以其他方式(例如通过文件)向 Python 脚本提供输入。

现在你已经澄清了你的问题,你不希望 Python 进程的stdin附加到编辑器后,您可以按如下方式修改代码:

editorprocess = subprocess.Popen([editor or "vi", temppath],
                                 stdin=open('/dev/tty', 'r'))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中通过管道传输到脚本时无法启动交互式程序 的相关文章

随机推荐

  • 创建 Gmail 共享链接

    我想在我的单页 Web 应用程序上放置一个按钮 允许用户通过 Gmail 发送链接 我发现有些网站 例如 addthis com 提供了这样的按钮 但是该按钮自动使用网址栏中的链接 由于我有一个单页 Web 应用程序 因此网址栏中的链接将始
  • 嵌入数组中嵌入文档中的项目字段

    我有以下查询 cursor self postCol aggregate graphLookup from pCol startWith parent connectFromField parent connectToField id as
  • Java 中的散列——结构和访问时间

    我正在寻找两个不同但相关的论点的验证 上述论点 A 及以下 B Q 中的第一行行注释 A 道路HashMap的结构是 a HashMap是一张普通的桌子 这就是直接内存访问 DMA 背后的整个想法HashMap 或一般的散列 首先 是将这种
  • 微软团队机器人自适应卡片轮播删除卡片

    我正在将 Microsoft 团队机器人与 Node js 一起使用 我正在渲染自适应卡的轮播 并在每张卡上执行操作 我的要求是删除单击该操作的单个卡片 是否可以 当前代码如下所示 我尝试过删除活动 但这会删除整个轮播 const Turn
  • 使用我的数据库中的数据计算年龄

    这是我当前正在使用的代码 但它不起作用 Geboortedatum 在荷兰语中是出生日的意思 mysql connect xxx xxx xxx mysql select db xxx result mysql query select G
  • 如何从 Facebook Graph API 获得响应能力?

    我可以从 Facebook Graph API 中提取一个指标来告诉我其中一个 两个吗Response Rate and or Average Response Time从页面 我将附上我所指内容的屏幕截图 当我进入 设置 gt 见解 gt
  • 无法在 AutoMapper 5 中从 ViewModel 映射到 ApplicationUser

    我有一个从 ApplicationUser 基类 ASP NET Identity 继承的 Student 类 它有一个名为 StudentViewModel 的 ViewModel 如下所示 实体类 public class Applic
  • Google Play 说我的 apk 使用两个本机平台(我的库),因此它支持 0 台设备

    当我在 Google Play 上发布 apk 时 它显示 支持 0 台设备 在 apk 描述的底部写着 本机平台 actionbarsherlock SherlockNavigatorDrawer 这些是我用于我的项目的库 它们不是 ja
  • 在 C++ 中模拟 lambda 的复制赋值运算符

    这个问题有两个部分 Firstly 有人可以解释 C 禁用 lambda 的复制赋值运算符背后的基本原理吗 如果您要允许复制构造函数 为什么不允许复制赋值运算符呢 Secondly 如何在不强迫人们编写 C 03 风格函子或使用 std f
  • MediaElement 和 RTSP

    MediaElement 支持 RTSP 吗 我有一个流正在运行 我可以通过以下方式使用 VLC 播放器使用该流 rtsp 192 168 1 17 554 stream 但是 当尝试使用 Windows Media Player 时 我无
  • 如何将一个巨大的矩阵逐行写入文件(fortran 90)

    我想将一个包含大量数据的矩阵逐行写入文件中 例如 我有一个 100 100 的矩阵 我想在文件中以 100 100 的形式保存它 但是 它不起作用 以下是我的代码和一些描述 N和M是数百左右的整数 RECL 是预期长度我设置了文件 但在这里
  • 如何通过行列切换进行矩阵转换?

    我有一个由元素组成的方阵 1 或 0 第 i 行切换会切换所有第 i 行元素 1 变为 0 反之亦然 并且第 j 列切换切换所有 第 j 列元素 我有另一个方阵 大小相似 我想将初始矩阵更改为 使用最少切换次数的最终矩阵 例如 0 0 1
  • 使用清单的 DLL 重定向

    我需要可靠地重定向应用程序对特定 DLL 的查找 使用 app exe local 方法不起作用 因为如果应用程序具有清单 嵌入或单独的文件 则本地文件将被忽略 因此 我尝试通过在清单中将 DLL 定义为私有程序集来进行 DLL 重定向 我
  • 线性时间排序? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 给定 0 n 3 1 范围内的 n 个整数的输入集 提供线性时间排序算法 这是我周四测试的回顾 我不知道如何解决这个问题 也看看相关的排序 鸽巢排序 or 计数排序 也基数排序正如普
  • 从 VSTO PowerPoint 功能区调用 VBA AddIn 宏

    我在这个问题上被困了几个小时 我正在用 C 开发一个 PowerPoint 插件 我想使用另一个插件 PPAM 文件 中的宏 PPAM 文件已安装并启用 在应用程序参考中我发现我需要使用Application Run方法 但我无法让它工作
  • Selenium——如何等待页面完全加载[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Java 和 Selenium WebDriver 自动化一些测试用例 我有以下场景 有一个名为 产品 的页面 当我点击 查看详细信息 链接时 在 产品 页面中 会出现一个包含商品详细信息的弹出窗
  • 当组合根位于客户端时如何在 WCF 中注入依赖项

    在开始之前 我必须说 我可能咬得太多 但我正处于绝望的学习狂潮中 我需要很多帮助 我正在编写一个练习 从两本书中获取样本 1 Net 中的依赖注入 作者 Mark Seemann2 Brian Egan 和 Steve Valenzuela
  • React-router transitionTo 不是一个函数

    import React from react import Router Link Navigation from react router export default class ResourceCard extends React
  • 子图之间的箭头

    我决定玩玩this示例代码一点 我能够弄清楚如何在两个子图之间绘制一条直线 即使该线位于其中一个子图的边界之外 import matplotlib pyplot as plt import matplotlib as mpl import
  • 在 Python 中通过管道传输到脚本时无法启动交互式程序

    我有一个 python 脚本需要调用定义的 EDITOR or VISUAL 当单独调用 Python 脚本时 我可以启动 EDITOR没有任何问题 但是当我将某些内容传输到 Python 脚本时 EDITOR无法启动 现在 我正在使用 n