如何在 Git-Bash 终端中读取用户输入并传递给 Python 脚本

问题描述 投票:0回答:2

在开始之前我只是想告诉大家我是 python 的初学者:)

我正在通过 git bash 运行 python 脚本,同时提交代码更改(使用 git hook[commit-message]),我想从 git bash 终端读取一些 用户输入,并且必须发送相同的内容在我将验证的 python 脚本中,我尝试了 python 模块中可用的许多选项,如 getpass、subprocess、msvcrt 等,但对我来说没有任何作用。那么有人可以指导我或向我展示如何实现这一目标的代码吗?

下面是我使用过的示例代码之一,

import sys
sys.stderr.write("Enter> ")
s=input("")
print(s)

输出如下,实际上终端控制(stdin)不会等待获取用户输入,而是直接结束。

参考了下面的链接,但对我来说没有任何效果:( bash 脚本执行提示用户的 python 脚本 GIT hook -> Python -> Bash:如何读取用户输入?

python git-bash
2个回答
3
投票

我建议您通过

read
终端进行
bash
用户输入,然后将其作为参数传递给您的 Python 脚本。

这将是您的 Python 脚本文件:

import sys

def main():
    if len(sys.argv) == 1:
        print(1) # break commiting proccess 
        return
    username = sys.argv[1]
    password = sys.argv[2]
 
    # stuff to do before commiting (git hook) 

    if username == 'peyman' and password == '2020':
        print(0) # print 0 if everything works fine and you want to continue commiting
    else:
        print(1) # print non-zero if something goes bad and you want to break commiting proccess

if __name__ == "__main__":
    main()

这将是 .git/hook/📂 文件夹中的

pre-commit
文件:

#!/bin/bash
echo "Username:"
exec < /dev/tty
read Username
echo "Password:"
read Password
x=$(python main.py $Username $Password)
exit $x

如您所知,如果

pre-commit
0
退出,则提交过程将执行,如果
pre-commit
返回非零,则提交将中止。因此,如果您在 Python 脚本中使用
print(0)
,则输出设置为
exit
命令,如下所示:
exit 0

正如你所说,所有过程都在Python脚本文件中完成


2
投票

我认为你不想要 stderr。试试这个:

s = input("Enter> ")
print(s)

更新:这似乎不适合你。 Python 中读取输入的另一种方法如下:

>>> x = sys.stdin.readlines(1)
testing
>>> x
['testing\n']
>>> x[0].rstrip('\n')  # isolate the input
'testing'

但是,这可能是脚本运行环境的问题。您能否在问题中提供更多详细信息,以便我们重现您的问题?否则,您找到的答案似乎可以解决您的问题https://stackoverflow.com/a/46016718/13676619

© www.soinside.com 2019 - 2024. All rights reserved.