繁体   English   中英

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

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

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

I'm running a python script via git bash while committing code changes(using git hook[commit-message] ) and I wants to read some user input from git bash terminal and the same has to be sent to my python script where i'我会验证这一点,我尝试了 python 模块中可用的许多选项,例如 getpass、subprocess、msvcrt 等,但对我没有任何作用。 那么有人可以指导我或向我展示如何实现这一目标的代码吗?

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

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

output 在下面,实际上终端控件(stdin)并没有等待用户输入,而是简单地结束了。 Git Bash 终端的输出

Referred below links but nothing worked out for me:( bash script which executes a python script which prompts user GIT hook -> Python -> Bash: How to read user input?

我不认为你想要标准错误。 尝试这个:

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

我建议您通过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返回非零,则提交将中止。 因此,如果您在python 脚本print(0) ,则 output 设置为exit命令,如下所示: exit 0

正如你所说的 python 脚本文件中完成的所有过程

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM