我正在使用fabric在一台服务器上对另一台服务器运行命令。具体来说,我正在通过psql命令行运行SQL查询。
fabric run()函数抛出了一个我可以捕获的SystemExit异常。
如果我直接去服务器并运行psql命令,我会被告知:
psql: could not connect to server: Connection timed out
Is the server running on host "xyz.example.com" (10.16.16.66) and accepting
TCP/IP connections on port 5432?
所以,我知道命令不起作用,但我想要的是在psql下获取该文本,以便我的代码可以明确地解决问题。
我认为结构代码很好,因为如果我更改psql命令使它在同一台服务器上执行但是对不同的数据库执行,我没有异常和预期的答案。所以问题是我运行psql的服务器无法与其中一个数据库服务器通信。
在Fabric抛出SystemExit exeption之后,是否可以通过结构获取psql命令的结果?
供参考,以下是示例代码:
from __future__ import with_statement
from fabric.api import local, settings, abort, run, cd, execute, env
from fabric.contrib.console import confirm
import sys
import os
def test():
try:
count = run('psql blah blah blah',timeout=60)
print('count: {}'.format(count))
except Exception,ex:
print('====> Exception type: %s' % ex.__class__)
print('====> Exception: %s' % ex)
except SystemExit,ex:
print('====> Exception type: %s' % ex.__class__)
print('====> Exception: %s' % ex)
def go():
print "Working"
env.host_string = "jobs0.onshift.com"
execute(test)
答案 0 :(得分:0)
查看结构文档中的settings context manager模块,以及run
from fabric.api import *
from fabric.context_managers import settings
def test():
with settings(warn_only = True):
res = run('psql blah blah blah', timeout = 60)
if res.succeeded:
print('count: {}'.format(res))
def go():
print "Working"
execute(test, hosts = ["jobs0.onshift.com"])