導航:首頁 > 編程語言 > 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相關的資料

熱點內容
hexophp 瀏覽:271
用什麼app買東西半價 瀏覽:62
蘋果下載的pdf文件怎麼打開 瀏覽:211
如何在伺服器上隱藏源站地址 瀏覽:645
單片機進制字母對應表 瀏覽:528
向某人下命令 瀏覽:627
編程中刪除數組中的數 瀏覽:86
aes對稱加密反編譯 瀏覽:550
java編譯成exe 瀏覽:190
gps處理演算法 瀏覽:596
什麼app可以和對象存錢 瀏覽:146
java字元串表達式計算 瀏覽:330
javacmd環境變數 瀏覽:51
電視上面找不到全民歌app怎麼辦 瀏覽:156
單片機中psw0 瀏覽:994
優酷視頻加密么 瀏覽:763
本地連接dos命令 瀏覽:206
雲伺服器怎麼上傳金幣房卡游戲 瀏覽:71
Python快遞管理可視化 瀏覽:419
java正則驗證數字 瀏覽:830