Python shell和程序中的不同行为

时间:2014-09-04 09:23:52

标签: python linux git shell ssh

我使用subprocess.Popen实例化ssh-agent,添加密钥并将git存储库推送到远程。为此,我将它们与&&串在一起。我使用的代码是

subprocess.Popen("eval $(ssh-agent) && ssh-add /root/.ssh/test_rsa && git push target HEAD", shell=True)

当我将其作为.py文件运行时,系统会提示我输入密钥的密码。这看起来像我一样。

Identity added: /root/.ssh/test_rsa (/root/.ssh/test_rsa)

但是当它试图将存储库推送到远程时,会发生错误。

ssh: connect to host ***.***.***.*** port 22: Connection refused
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

但是,如果我只是在交互式shell中运行相同的命令,它就可以工作。导致这种行为差异的原因是什么,我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

git服务器位于脚本早期启动的aws实例上。有一个检查以确保它正在运行,但是一旦启动开始,aws似乎报告一个实例正在运行。这意味着实例运行的时间很短,但ssh守护程序不存在。因为脚本非常快地移动到尝试推送,所以它在这段时间内落下,并且服务器拒绝其连接尝试。当我在交互式shell中尝试任何东西时,实例运行的时间足够长,以至于它正在工作。

简而言之,aws表示在操作系统启动服务之前,实例正在运行。