我正在使用python fabric中的run命令来远程执行脚本。
C = fabric.Connection('ip', user='user', connect_kwargs={"password": "password"})
try:
r = C.run('python3 ~/script.py')
if r:
print('{} SUCCESS'.format(C.host))
break
else:
print('{} ERROR'.format(C.host))
break
except:
print('{} ERROR'.format(C.host))
我的script.py是:
def download_file(url, filename):
try:
response = requests.get(url)
# Open file and write the content
with open(filename, 'wb') as file:
# A chunk of 128 bytes
for chunk in response:
file.write(chunk)
return 1
except requests.exceptions.RequestException as e:
return 0
download_file(url,filename)
当我执行运行命令时,是否有办法查看函数中返回的值是1还是0?
谢谢!
答案 0 :(得分:0)
根据Fabric 2.x文档,默认情况下会捕获结果并将其提供给结果的stdout
和stderr
属性下:http://docs.fabfile.org/en/2.0/getting-started.html#run-commands-via-connections-and-run
r = C.run('python3 ~/script.py')
print(r.stdout)
答案 1 :(得分:0)
run
命令返回一个Result
对象,该对象具有以下属性(以及其他属性):
所以您需要检查exited
/ return_code
属性。
但是,您的脚本不会随函数的返回码一起退出。为此,您需要使用该值sys.exit
,因此将download_file更改为:
sys.exit(download_file(url))
将从download_file函数获得返回代码。您需要在脚本上import sys
,以确保您有sys
模块可用。
当程序由于非零退出代码而失败时,将引发UnexpectedExit
异常。为了在这种情况下获得退出代码,您可以(a)捕获异常,或者(b)将参数warn=True
传递给run命令,因此run命令看起来像:
r = C.run('python3 ~/script.py', warn=True)