导航:首页 > 编程语言 > tryexpectpython

tryexpectpython

发布时间:2022-09-02 12:06:40

python的公共变量如何管理

全局变量管理模块
首先定义一个全局变量管理模块

# common/gloabalvar.py
# -*- coding:utf-8 -*-
"""
global var mole
"""

def _init():
global _global_dict
_global_dict = {}

def set_value(name, value):
"""定义一个全局变量"""
_global_dict[name] = value

def get_value(name, defValue=None):
"""获取一个全局变量值,不能存在则返回默认值"""
try:
return _global_dict[name]
except KeyError:
return defValue
二、初始化及定义(设置)全局变量
# main.py

import app.common.globalvar as globalvar

if __name__ == "__main__":
# init global var
globalvar._init()
globalvar.set_value('itsm_deadline', SettingConfig.ITSM_DAILY_DEADLINE)
globalvar.set_value('email_subject', SettingConfig.EMAIL_SUBJECT)
globalvar.set_value('email_recipients', SettingConfig.EMAIL_RECIPIENTS)
globalvar.set_value('auto_submit_status', SettingConfig.AUTO_SUBMIT_STATUS)
1
2
3
4
5
6
7
8
9
10
11
三、获取全局变量
# business.py
import app.common.globalvar as globalvar

status = globalvar.get_value('auto_submit_status')
附加:API管理全局变量,都是基于上述三点完成
对于flask-restful的web应用则可以通过API接口查看全局变量的值以及通过API接口设置和管理它们

# app/api/v1/test/test.py
from flask_restplus import Resource
import app.common.globalvar as globalvar
from .marshal_model import admin_api_ns as api

@api.route('/')
class GlobalVar(Resource):
"""全局变量管理API"""
@api.doc('Get all the global var')
@api.response(HTTP_GET_SUCCESS, 'query success')
def get(self):
"""查询所有的全局变量"""
glist = globalvar._global_dict
return glist, HTTP_GET_SUCCESS

@api.route('/auto')
class AutoSubmit(Resource):
"""查看及修改自动状态的API"""
@api.doc('check auto submit status')
@api.marshal_with(set_autosubmit)
@api.response(HTTP_GET_SUCCESS, 'query success')
def get(self):
"""测试查看自动状态开关状态"""
status = globalvar.get_value('auto_submit_status')
# status = query_autojob_status()
return {'status': status}, HTTP_GET_SUCCESS

@login_required
@admin_required
@api.doc('set auto submit the planlist everyday')
@api.expect(set_autosubmit)
def post(self):
"""设置每天定时自动开关"""
data = request.json
status = data.get('status')
globalvar.set_value('auto_submit_status', status)
# resp, returncode = update_autojob_status(status)
return {'message': 'success'}, HTTP_POST_SUCCESS

⑵ Python 为什么不能捕获如下的除零异常

把try expect放在exe()函数里面
如果在程序出错的时候捕捉到这个错误,被用自己的方式来处理它,或者不想让使用程序的用户了解程序出错的详细信息,这个时候我们就需要捕捉异常,可以使用 try和except 语言。
>>> a = 10
>>> b = 0
>>> print a / b
>>>
这样,程序运行之后会产生异常错误,信息如下:
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <mole>
print a /b
ZeroDivisionError: integer division or molo by zero
如何处理上面的除零错误,并且返回自己想要的内容,请看下面的代码:
try:
a = 10
b = 0
print a / b
except ZeroDivisionError:
pirnt “除零错误,已经捕获!”
如果需要同时捕捉多个可能的异常错误,可以把异常的类型,放入一个元组中,举例说明:
except (ZeroDivisionError, TypeError, NameError)

⑶ python 实现ssh的执行远端命令和scp的不同机器文件传输功能

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pexpect
def ssh_cmd(ip, passwd, cmd):
ret = -1
ssh = pexpect.spawn('ssh root@%s "%s"' % (ip, cmd))
try:
i = ssh.expect(['password:', 'continue connecting (yes/no)?'], timeout=5)
if i == 0 :
ssh.sendline(passwd)
elif i == 1:
ssh.sendline('yes\n')
ssh.expect('password: ')
ssh.sendline(passwd)
ssh.sendline(cmd)
r = ssh.read()
print r
ret = 0
except pexpect.EOF:
print "EOF"
ssh.close()
ret = -1
except pexpect.TIMEOUT:
print "TIMEOUT"
ssh.close()
ret = -2
return ret

利用pexpect模块我们可以做很多事情,由于他提供了自动交互功能,因此我们可以实现ftp,telnet,ssh,scp等的自动登录,还是比较实用的。根据上面的代码相信读者已经知道怎么实现了(python就是那么简单!)。

上面的代码去完成任务还是比较费时间的,因为程序要等待自动交互出现,另外ubuntu用ssh连接就是比较慢,要进行一系列的验证,这样才体现出ssh
的安全。我们要提高效率,在最短的时间内完成。后来我发现了python里面的paramiko模块,用这个实现ssh登录更加简单。看下面的代码:

复制代码 代码如下:

#-*- coding: utf-8 -*-
#!/usr/bin/python
import paramiko
import threading
def ssh2(ip,username,passwd,cmd):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,passwd,timeout=5)
for m in cmd:
stdin, stdout, stderr = ssh.exec_command(m)
# stdin.write("Y") #简单交互,输入 ‘Y'
out = stdout.readlines()
#屏幕输出
for o in out:
print o,
print '%s\tOK\n'%(ip)
ssh.close()
except :
print '%s\tError\n'%(ip)
if __name__=='__main__':
cmd = ['cal','echo hello!']#你要执行的命令列表
username = "" #用户名
passwd = "" #密码
threads = [] #多线程
print "Begin......"
for i in range(1,254):
ip = '192.168.1.'+str(i)
a=threading.Thread(target=ssh2,args=(ip,username,passwd,cmd))
a.start()

上面的程序还是有些技巧的:
1.
利用多线程,同时发出登录请求,同时去连接电脑,这样速度快很多,我试了一下,如果不用多线程,直接一个一个挨着执行的话,大约5~10秒钟才能对一台电
脑操作完,具体时间要根据命令的来决定,如果是软件安装或者卸载时间要更长一些。这样下来怎么也要一二十分钟,用多线程后就快多了,所有的命令执行完用了
不到2分钟!
2.最好用root用户登录,因为安装或者卸载软件的时候如果用普通用户又会提示输入密码,这样又多了一次交互,处理起来就比较麻
烦!安装软件时apt-get install xxx
最好加上“-y”参数,因为有时安装或删除软件时提示是否继续安装或卸载,这又是一次自动交互!加上那个参数后就没有人机交互了。
3. 循环时循环所有ip,因为计算机的ip是路由器自动分配的,保险起见,最好全部都执行,保证没有遗漏的主机
4.远端执行命令时如果有交互,可以这样用 stdin.write("Y")来完成交互,“Y”就是输入“Y”。
5.把所有的命令放到一个列表里面,遍历列表可以依次执行列表里面的命令
6.为了更好的进行控制,最好在电脑上提前把root用户打开,装好ssh服务器并让其开机自动执行。

⑷ Python中try的else没必要

else存在的意义是,执行只有在try代码块没有异常发生时才需要执行的代码,而如果在执行try代码块时捕获了异常就不执行这个else代码块了。

如下第一段代码,抛出异常,所以else的内容不会执行。

try:
assertFalse,("Error")
exceptAssertionErrorasError:
print(Error)
else:
print("NoError")
finally:
print("finished")

下面同样的,如果没有异常,那么就执行else中的代码。

try:
assertTrue,("Error")
exceptAssertionErrorasError:
print(Error)
else:
print("NoError")
finally:
print("finished")

其实else就是个普通的else,是个普通的选择语句。

那么问题来了,else有没有必要呢?是不是可以把else的内容放到外面呢?不过这个语法既然存在,当然不是多余的。

我们在设计程序时,有时候希望能准确捕获try代码块中的内容引发的异常。如果把else代码块中的内容也放到try代码块中,虽然在没有异常发生时,与使用else代码块没有区别,可是如果发生了异常呢,如何去界定这个异常是由原try代码块引发的,还是新加入的原else代码块中的代码引发的呢?所以改用else可以使程序的逻辑更明确。

有点啰嗦,随便看看吧= =

⑸ python初学问题,colon expected什么意思

colon expected是缺少冒号的意思。

题主的程序中缺少了冒号,程序无法正确执行时会提示错误原因,“colon expected”意思是缺少冒号,需要检查程序代码哪里缺少冒号,这段程序需要在if x+y+z == 10后面和else后面分别加入英文冒号:来保证程序正确性。

这段程序正确的语法示例如下:

(5)tryexpectpython扩展阅读

1、python的基本语法:

Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。

2、python多行语句写法:

Python语句中一般以新行作为语句的结束符,但可以使用斜杠( )将一行的语句分为多行显示。使用if、while、while、try时要以冒号:结尾,并换行将条件块内容统一缩进。

⑹ python 新建文件怎么加后缀

建议:
* 使用with语句读取文件
* 函数方式调用print以兼容py3
* pep8命名规则命名变量
#coding=utf8
import easygui

print(u"你好,欢迎使用充电数据表。")
print(u"记账功能,查账功能")

choice = easygui.buttonbox(msg = u"选择需要使用的功能",
title = u"充电数据表",
choices = (u"查账",u"记账",u"撤销"))
if choice == u"查账" :
while 1:
roomNumber = easygui.enterbox(msg = u"输入房间号码")
if not roomNumber.isdigit():
print(u'请输入正确的房间号')
continue
#输入房号
print(u"%s房"%roomNumber)
roomNumber = int(roomNumber)
break
#**************************************************************
try: #try...expect是python中的异常处理语句,try中写
with open('%s.txt'%roomNumber) as f: # 待检测的操作语句
for line in f: print line
except IOError: # expect中写差错处理语句
print '*** file open error:'
raw_input(u'按回车关闭\Press Enter to close')
#*****************************************************************

⑺ expected an indented block什么意思

Python严格地要求代码缩进,缩进的代码块相对于上一级是从属关系。用if语句举个例子:
if a==2: print 'hello world'if语句的条件为真时会执行print语句,print语句是if语句的从属代码块,代表从属关系,print语句之前有4个空格。如果if语句没有任何从属的代码块就会报错expected an indented block。与if语句类似的,必须包含从属代码块的还有while、for、try-except等。

⑻ python3 中的try... except Exception,e: ...怎么不能用了变成什么了呢

语法错误,应该改成下列语法:

python3 中捕捉异常需要使用try/except语句,具体格式如下:

try:

<语句> #运行别的代码

except <名字>:

<语句> #如果在try部份引发了'name'异常

except <名字>,<数据>:

<语句> #如果引发了'name'异常,获得附加的数据

else:<语句> #如果没有异常发生

编辑如下:

“拓展资料“:

try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

阅读全文

与tryexpectpython相关的资料

热点内容
双屏程序员 浏览:799
怎么把两个文件夹放到一个文件夹里面 浏览:545
命令与征服大神宫 浏览:207
php发送短信验证码 浏览:505
前端服务器如何接收http请求 浏览:796
程序员资质查询 浏览:357
程序员被别人开除怎么办 浏览:888
解压视频看一下 浏览:129
android仿知乎日报 浏览:335
为什么前端比安卓手机需求大 浏览:855
命令行执行关机命令 浏览:52
在学校心情不好怎么解压 浏览:116
我的世界基岩版服务器怎么读取 浏览:161
快件命令 浏览:853
阿里云06折服务器能用吗 浏览:421
h5个人中心源码 浏览:221
下三角矩阵的压缩存储 浏览:922
招人用什么app好用 浏览:722
飞行控制源码 浏览:185
androidhdmi开发 浏览:689