在开始之前我只是想告诉大家我是 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:如何读取用户输入?
我建议您通过
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脚本文件中完成
我认为你不想要 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。