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

How can I read user Input in Git-Bash terminal which passes to a Python Script

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

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

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

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

下面是输出,实际上终端控件 (stdin) 并没有等待用户输入,而是直接结束了。

参考了以下链接,但对我来说没有任何效果:( bash script which executes a python script which prompts user

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

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

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

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

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

我建议您通过 bash 终端 read 用户输入,然后将其作为参数传递给您的 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]
 
    # kinda stuff to do before commiting (git hook) 

    if username == 'peyman' and password == '2020':
        print(0) # print 0 if everything works fine and you wanna continue commiting
    else:
        print(1) # print non-zero if something goes bad and you wanna 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-commit0 退出,提交过程将执行,如果 pre-commit return 非零,提交将中止。 因此,如果您在 python 脚本 print(0),输出设置为 exit 命令,如下所示:exit 0

As you said all the process done in the python script file

我测试了一下,可以,给你~
快乐编码