如何读取传递给 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-commit
以 0
退出,提交过程将执行,如果 pre-commit
return 非零,提交将中止。
因此,如果您在 python 脚本 中 print(0)
,输出设置为 exit
命令,如下所示:exit 0
As you said all the process done in the python script file
我测试了一下,可以,给你~
快乐编码
在开始之前只想告诉大家我是 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-commit
以 0
退出,提交过程将执行,如果 pre-commit
return 非零,提交将中止。
因此,如果您在 python 脚本 中 print(0)
,输出设置为 exit
命令,如下所示:exit 0
As you said all the process done in the python script file
我测试了一下,可以,给你~
快乐编码