繁体   English   中英

通过Python Shell执行Git服务器命令

[英]Executing Git server commands through Python shell

我正在尝试用Python编写自己的Shell脚本供SSH调用(使用SSH command = authorized_keys文件中的参数)。 目前,我只是简单地调用原始的SSH命令(在脚本被称为SSH之前,它被设置为环境变量)。 但是,关于存储库意外挂起,我总是会遇到git错误。

我的Python代码实际上是:

#!/usr/bin/python
import os
import subprocess

if os.environ('SSH_ORIGINAL_COMMAND') is not None:
    subprocess.Popen(os.environ('SSH_ORIGINAL_COMMAND'), shell=True)
else:
    print 'who the *heck* do you think you are?'

请让我知道是什么导致git命令无法成功允许系统工作。 作为参考,当客户端调用git push时在服务器上调用的命令是git-receive-pack /path/to/repo.git

关于上面显示的Python代码,我尝试使用shell=Trueshell=False (当False时正确地将命令作为列表传递),但都不能正常工作。

谢谢!

找到了解决方案!

您需要调用由Popen调用创建的子流程对象的communicate()方法。

proc = subprocess.Popen(args, shell=False)
proc.communicate()

我不确定为什么,但是我认为这与允许通过stdin提供数据的communicate()方法有关。 我以为该过程将自动接受输入,因为我没有在任何地方覆盖输入流,但是也许需要手动调用进行通信才能开始工作……希望有人可以在这里称重!

您也不能stdout=subprocess.PIPE因为它会导致命令挂起。 同样,不确定这是因为git工作原理还是整个过程中需要做的事情。 希望这至少对将来的人有所帮助!

暂无
暂无

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

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