我正在尝试用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=True
和shell=False
(在False
时正确地将命令作为列表传递),但都不能正常工作。
谢谢!
答案 0 :(得分:0)
找到了解决方案!
您需要调用通过lambda
调用创建的子流程对象的Proc
方法。
return Double.compare(j1.getDouble(keyWorth), j2.getDouble(keyWorth));
我不确定为什么,但是我认为这与return j1.getDouble(keyWorth).compareTo(j2.getDouble(keyWorth))
方法有关,该方法也可以通过communicate()
给出数据。我以为该过程将自动接受输入,因为我没有在任何地方覆盖输入流,但是也许需要手动调用进行通信才能开始工作……希望有人可以在这里加油!
您也无法Popen
,因为这会导致命令挂起。同样,不确定这是因为proc = subprocess.Popen(args, shell=False)
proc.communicate()
的工作方式还是整个过程中需要做的事情。希望这至少可以对将来的人有所帮助!