GIT hook -> Python -> Bash:如何读取用户输入?

2024-04-16

我正在 Python 3.5 中做一个 GIT 钩子。 python 脚本调用 Bash 脚本,该脚本使用以下命令读取用户的输入read命令。

bash 脚本本身可以工作,在直接调用 python 脚本时也可以,但是当 GIT 运行用 Python 编写的钩子时,它不会按预期工作,因为没有请求用户输入。

重击脚本:

#!/usr/bin/env bash

echo -n "Question? [Y/n]: "
read REPLY

GIT 挂钩(Python 脚本):

#!/usr/bin/env python3    
from subprocess import Popen, PIPE
proc = Popen('/path/to/myscript.sh', shell=True, stderr=PIPE, stdout=PIPE)        
stdout_raw, stderr_raw= proc.communicate()

当我执行Python脚本时,Bash的read似乎没有等待输入,我只得到:

b'\nQuestion? [Y/n]: \n'

如何让 bash 脚本从 Python 调用时读取输入?


事实证明,这个问题与 Python 无关:如果 GIT 钩子调用了 bash 脚本,它也无法请求输入。

给出了我找到的解决方案here https://stackoverflow.com/a/10015707/220949.

基本上,解决方案是将以下内容添加到 bash 脚本中之前read:

# Allows us to read user input below, assigns stdin to keyboard
exec < /dev/tty

就我而言,我还必须像这样调用 bash 进程Popen(mybashscript)代替Popen(mybashscript, shell=True, stderr=PIPE, stdout=PIPE)),因此脚本可以自由输出到 STDOUT,而不会在 PIPE 中捕获。

或者,我没有修改 bash 脚本,而是在 Python 中使用:

sys.stdin = open("/dev/tty", "r")
proc = Popen(h, stdin=sys.stdin)

上述链接的评论中也建议了这一点。

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

GIT hook -> Python -> Bash:如何读取用户输入? 的相关文章

  • 检查 Python 中的可迭代对象中的所有元素的谓词是否计算为 true

    我很确定有一个常见的习语 但我无法通过谷歌搜索找到它 这是我想做的 用Java Applies the predicate to all elements of the iterable and returns true if all ev
  • Pandas:如果单元格包含特定文本则删除行

    pandas 中的这段代码不起作用 如果该列包含提供的任何文本 数字 我希望它删除该行 目前 我只能在单元格与我的代码中传递的确切文本匹配时才能使其工作 因为它只删除显示 Fin 的单元格不是金融或金融 df2 df df Team Fin
  • 搜索多个字段

    我想我没有正确理解 django haystack 我有一个包含多个字段的数据模型 我希望搜索其中两个字段 class UserProfile models Model user models ForeignKey User unique
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 结构差异 sudo() run('sudo 命令')

    我想知道函数之间有什么区别sudo 和函数run sudo u user smth 文档上有 sudo 在所有运行方式上都是相同的 除了它总是换行 调用 sudo 程序中的给定命令以提供超级用户 特权 但有几次 sudo cmd 提示我输入
  • 在 matplotlib 中的极坐标图上移动径向刻度标签

    From matplotlib 示例 http matplotlib org examples pylab examples polar demo html import numpy as np import seaborn as sbs
  • Django 的 request.FILES 出现 UnicodeDecodeError

    我在视图调用中有以下代码 def view request body u for filename f in request FILES items body body Filename filename n f read n 在某些情况下
  • 使用Python计算目录的大小?

    在我重新发明这个特殊的轮子之前 有没有人有一个很好的例程来使用 Python 计算目录的大小 如果例程能够很好地以 Mb Gb 等格式格式化大小 那就太好了 这会遍历所有子目录 总结文件大小 import os def get size s
  • Geodjango距离查询未检索到正确的结果

    我正在尝试根据地理位置的接近程度来检索一些帖子 正如您在代码中看到的 我正在使用 GeoDjango 并且代码在视图中执行 问题是距离过滤器似乎被完全忽略了 当我检查查询集上的距离时 我得到了预期距离 1m 和 18km 但 18km 的帖
  • SMTP_SSL SSLError: [SSL: UNKNOWN_PROTOCOL] 未知协议 (_ssl.c:590)

    此问题与 smtplib 的 SMTP SSL 连接有关 当与 SMTP 无 ssl 连接时 它正在工作 在 SMTP SSL 中尝试相同的主机和端口时 出现错误 该错误仅基于主机 gmail 设置也工作正常 请检查下面的示例 如果 Out
  • 如何在 pandas 中使用 read_fwf 跳过空行?

    I use pandas read fwf http pandas pydata org pandas docs stable generated pandas read fwf htmlPython pandas 0 19 2 中的函数读
  • 确定我可以向文件句柄写入多少内容;将数据从一个 FH 复制到另一个 FH

    如何确定是否可以将给定数量的字节写入文件句柄 实际上是套接字 或者 如何 取消读取 我从其他文件句柄读取的数据 我想要类似的东西 n how much can I write w handle n read r handle buf n a
  • 使用 Pandas 计算 delta 列

    我有一个数据框 如下所示 Name Variable Field A 2 3 412 A 2 9 861 A 3 5 1703 B 3 5 1731 A 4 0 2609 B 4 0 2539 A 4 6 2821 B 4 6 2779 A
  • 将 stdout 和 stderr 重定向到带有前缀的单个文件

    我正在编写一个 bash 脚本 需要重定向stdout and stderr我运行到单个文件的命令的输出 在每行前面加上前缀stderr or stdout 因此 有没有一个简单的方法可以做到这一点 from Debian http www
  • ANTLR 获取并拆分词法分析器内容

    首先 对我的英语感到抱歉 我还在学习 我为我的框架编写 Python 模块 用于解析 CSS 文件 我尝试了 regex ply python 词法分析器和解析器 但我发现自己在 ANTLR 中 第一次尝试 我需要解析 CSS 文件中的注释
  • Anaconda 无法导入 ssl 但 Python 可以

    Anaconda 3 Jupyter笔记本无法导入ssl 但使用Atom终端导入ssl没有问题 我尝试在 Jupyter 笔记本中导入 ssl 但出现以下错误 C ProgramData Anaconda3 lib ssl py in
  • SocketIO + Flask 检测断开连接

    我在这里有一个不同的问题 但意识到它可以简化为 如何检测客户端何时从页面断开连接 关闭其页面或单击链接 换句话说 套接字连接关闭 我想制作一个带有更新用户列表的聊天应用程序 并且我在 Python 上使用 Flask 当用户连接时 浏览器发
  • 在系统托盘中隐藏 tkinter 窗口 [重复]

    这个问题在这里已经有答案了 我正在制作一个程序来提醒我朋友的生日 这样我就不会忘记祝福他们 为此 我制作了两个 tkinter 窗口 1 First one is for entering name and birth date 2 Sec
  • Django Admin 中的反向内联

    我有以下 2 个型号 现在我需要将模型 A 内联到模型 B 的页面上 模型 py class A models Model name models CharField max length 50 class B models Model n
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460

随机推荐

  • C# Datagridview 不对 Checkbox 列进行排序

    当我将 Linq to sql 查询绑定到 datagridview 在其间使用 BindingSource 时 默认情况下这些列是可排序的 然而 布尔类型似乎并非如此 对于这些 datagridview 使用复选框列 但是当我单击标题时没
  • .NET 多线程变量访问

    我有一个有 4 个线程的应用程序 GUI 控制器 生产者 消费者 GUI 是不言自明的 控制器在进行一些初始设置后启动生产者和消费者线程 生产者创建项目并将它们放置在 环形缓冲区 的空闲槽中 消费者从 环形缓冲区 中取出项目并将其写入磁盘
  • 当 Git 或 TortoiseGit 出现冲突时,正确的提交/推送方式是什么?

    我们正在使用 git 和合并工作流程 我们有很多 git 新手 包括 我 要么有 SVN 或 CVS 背景 要么没有版本控制背景 根本不 这是我们经常遇到的问题 许多团队成员都是 使用 TortoiseGit 由于并发 合并冲突经常发生 改
  • 什么是准备好的陈述?它们与动态sql有何不同?

    我没有看到任何重复的问题 但想知道是否有人可以提供一些很好的例子 特别是围绕这些问题的最佳实践 准备好的语句是预编译的您可以在数据库上多次运行的语句 并且 SQLServer 不会在您每次运行它时解析或生成不同的执行计划 通常 您在客户端上
  • Python - 将枚举转换为 Django models.CharField 选择元组 [重复]

    这个问题在这里已经有答案了 我有这个枚举 class Animal Enum DOG dog CAT cat 在 Django 模型中我有这个 possible animals DOG dog cat cat animal models C
  • Android menuitem onclick处理程序的返回值

    在 android 中 当我在 xml 中定义 menuitem 的 onclick 处理程序时
  • Notepad++ 将鼠标悬停在链接或颜色上进行预览?

    我想知道是否有一个选择或plugin 这使我们能够悬停预览要么是CSS颜色 or image 像这样 而且如果你将鼠标悬停在 img src 上 预览图片 尝试 Notepad 快速颜色选择器 双击十六进制颜色 会弹出一个颜色选择器以及预览
  • 如何使我的布局能够向下滚动?

    我无法向下滚动屏幕查看 回复者 部分中的数据 如何使我的布局可滚动 只需将所有内容包裹在一个ScrollView
  • 从具有重复值的 MySQL 结果创建多维嵌套数组 (PHP)

    我目前正在使用 PDO fetchAll 函数从数据库中提取菜单数据 这样做会将查询结果的每一行放入以下结构的数组中 Array 0 gt Array MenuId gt mmnlinlm08l6r7e8ju53n1f58 MenuName
  • 如何使用python比较两个html文件

    我想使用 python 来比较两个 html 文件 例子 html 1 p i love it p html 2 h2 i love it diff 文件将如下所示 diff html h2
  • 从 Hashicorp 金库存储和检索文件

    我不知道如何在 hashcorpVault 中存储文件 我们的 PoC 用例是将 SSL 证书存储在特定路径 然后通过 HTTP API 下载它 我尝试使用 kv 秘密引擎 这似乎是最合适的 似乎您可以指定一个包含数据的文件来存储为 Has
  • 如何使用 OAUTH2 从 Java 访问 Outlook.office365.com IMAP?

    由于 Microsoft 宣布很快将无法再通过基本身份验证访问 Outlook IMAP 邮箱 因此我正在尝试弄清楚如何在 Java 中使用 OAUTH2 正确打开 IMAP 邮箱 但我总是收到错误代码 A1 NO AUTHENTICATE
  • 将文本流从 NodeJS 传递到浏览器

    我正在尝试将 NodeJS 中处理的文本文件流式传输到浏览器 以下是处理前的文本文件 该文件名为 dbUsers json userId 443 email email protected cdn cgi l email protectio
  • 使用 RestSharp 根据请求添加证书

    我正在尝试与服务器通信 该服务器向我发送证书和私钥 以便成功执行我的请求 为了测试服务器 我使用Postman https www getpostman com 所以我在邮递员中填写了证书设置 并且我的请求工作正常 现在我想在 C 中做同样
  • 如何绑定谷歌云转发规则IP地址并发送?

    我已按照说明进行操作使用协议转发 https cloud google com compute docs protocol forwarding 在谷歌云平台上 所以我现在有这样的东西 gcloud compute forwarding r
  • Ninject 约定与 Ninject 工厂扩展将多种类型绑定到一个接口

    我正在尝试扩展标题为 SO 的问题中提出的场景Ninject Factory Extension 将多种具体类型绑定到一个接口 https stackoverflow com q 14451066 533958通过使用 Ninject Co
  • Swagger UI 上的服务器响应为空

    我有一个与 Swagger UI 集成的 REST API 但是 当我尝试从 Swagger UI 执行请求时 该界面仅向我显示curl 命令 但不提供服务器响应 从命令行运行时 curl 命令会返回预期的响应 但 UI 本身中没有显示任何
  • '\r':找不到命令[重复]

    这个问题在这里已经有答案了 echo Select your option echo 1 Change ip address echo 2 Add route echo 3 Reboot echo 4 Exit read A case A
  • 如何:使用 MvcContrib.Pagination 而不使用 MvcContrib.Grid 视图

    这最初是一个问题 但随着我做了一些实验 变成了一个解决方案 所以我想我会和大家分享这个 我的问题是 如何在不使用 MvcContrib Grid View 的情况下使用 MvcContrib Pagination 我的回答如下 我正在构建一
  • GIT hook -> Python -> Bash:如何读取用户输入?

    我正在 Python 3 5 中做一个 GIT 钩子 python 脚本调用 Bash 脚本 该脚本使用以下命令读取用户的输入read命令 bash 脚本本身可以工作 在直接调用 python 脚本时也可以 但是当 GIT 运行用 Pyth