首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过Python shell执行Git服务器命令

通过Python shell执行Git服务器命令
EN

Stack Overflow用户
提问于 2018-08-22 04:57:45
回答 1查看 42关注 0票数 1

我正在尝试用Python语言编写自己的shell脚本,以供SSH调用(使用authorized_keys文件中的SSH command=参数)。目前,我只是调用原始的SSH命令(在脚本调用我的SSH之前,它被设置为一个环境变量)。然而,我总是得到一个关于存储库意外挂起的git错误。

我的Python代码的字面意思是:

代码语言:javascript
复制
#!/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时正确地将命令作为列表传递),但都不能正常工作。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-08-22 06:11:54

找到解决方案了!

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

代码语言:javascript
复制
proc = subprocess.Popen(args, shell=False)
proc.communicate()

我不完全确定原因,但我认为这与允许数据也通过stdin提供的communicate()方法有关。我认为进程会自动接受输入,因为我根本没有覆盖输入流,但也许需要手动调用来进行通信,以踢出有人可以在这里权衡的off...hopefully!

您也不能stdout=subprocess.PIPE,因为它会导致命令挂起。同样,我不确定这是因为git是如何工作的,还是因为整个过程需要做些什么。希望这至少能在未来帮助到一些人!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51956605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档