从Python程序响应git命令行提示符

时间:2016-02-23 22:06:28

标签: python git pipe subprocess popen

我目前正在使用Python程序在对文件进行一些编辑后自动提交到存储库。我正在使用subprocess.Popen创建一个调用git二进制文件的子进程。我虽然在创建子进程时可以使用stdin=PIPE并且能够在命令行提示时写入我的用户凭据,但由于某种原因,这不会发生。代码如下所示:

proc = Popen(["git","push","origin","master"], stdin=PIPE)
proc.communicate("username")
proc.communicate("password")

现在正在发生的是它正在调用二进制文件但仍向我显示命令行提示符。我在这里看了一些其他问题,但它们都使用了与我相同的代码,所以我对这个问题感到有点困惑。我知道有很多其他方法可以实现这个结果,比如缓存我的凭据,但我很想知道这种方式是否可以用于多种原因。

1 个答案:

答案 0 :(得分:1)

proc = Popen(["git","push","origin","master"], stdin=PIPE,stdout=PIPE,stderr=PIPE)
time.sleep(1)
proc.stdin.write("username")
time.sleep(1)
proc.stdin.write("password")
#or maybe
for letter in "password":
    proc.stdin.write(letter)
    time.sleep(0.1)
print proc.communicate()

我想的......