python?命令行界面的用戶交互及優(yōu)化
背景
說(shuō)一千,道一萬(wàn),程序是為用戶服務(wù)的,所以在程序運(yùn)行過(guò)程,與用戶交互以獲取用戶的信息輸入和決策確認(rèn),是無(wú)法避免的編程需要考慮和解決的需求。
一個(gè)簡(jiǎn)單的demo
如下的程序中,程序需要生成一個(gè)新的 id_rsa.pub 文件,但是不巧,程序的工作目錄下已經(jīng)存在了一個(gè) id_rsa.pub 文件。我們需要告知用戶并獲得用戶的決策指示,以便可以做出用戶希望的行為。
下面的代碼使用 input 向用戶發(fā)起交互:
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from DebugInfo.DebugInfo import *
# endregion
if __name__ == "__main__":
畫(huà)板: 打印模板 = 打印模板(False)
畫(huà)板.執(zhí)行位置(__file__)
交互端: 交互接口類 = 交互接口類()
畫(huà)板.消息('程序已經(jīng)開(kāi)始運(yùn)行...')
畫(huà)板.消息('生成新的 id_rsa.pub 文檔...')
用戶選擇 = input('此操作將會(huì)刪除原有文本,請(qǐng)問(wèn)是否繼續(xù)(y:繼續(xù); n:返回): ')
if 用戶選擇:
if 用戶選擇 in 'yY':
畫(huà)板.消息(綠字('您選擇了繼續(xù),感謝信任...'))
elif 用戶選擇 in 'nN':
畫(huà)板.消息(紅字('您選擇了返回,您是一個(gè)謹(jǐn)慎的人'))
else:
畫(huà)板.提示錯(cuò)誤('您輸入了非期望的指示')
else:
畫(huà)板.提示錯(cuò)誤('您沒(méi)有輸入任何值')??上面的代碼中,我們提示用戶輸入決策,并對(duì)用戶輸入的決策進(jìn)行判斷和反饋:
- 當(dāng)用戶輸入 y or Y 時(shí),程序反饋用戶,感謝信息
- 當(dāng)用戶輸入 n or N 時(shí),程序反饋用戶,并中斷覆蓋文檔的損傷
- 當(dāng)用戶沒(méi)有輸入時(shí),程序反饋用戶沒(méi)有輸入任何信息
- 當(dāng)用戶輸入的值不在 y Y n N 范圍內(nèi)時(shí),提醒用戶輸入了非預(yù)期的值

優(yōu)化交互
命令行是一個(gè)主要以文本方程呈現(xiàn)信息的界面,這種界面下信息密度高,用戶操作的誤操作率也比較高,也就是說(shuō),我們需要容許用戶錯(cuò)誤和非法的輸入,并提供補(bǔ)救的機(jī)會(huì)。
以下代碼進(jìn)行了優(yōu)化,為用戶提供了補(bǔ)救的機(jī)會(huì):
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from DebugInfo.DebugInfo import *
# endregion
if __name__ == "__main__":
畫(huà)板: 打印模板 = 打印模板(False)
畫(huà)板.執(zhí)行位置(__file__)
交互端: 交互接口類 = 交互接口類()
畫(huà)板.消息('程序已經(jīng)開(kāi)始運(yùn)行...')
畫(huà)板.消息('生成新的 id_rsa.pub 文檔...')
確認(rèn)覆蓋: bool = False
while True:
用戶選擇 = input('此操作將會(huì)刪除原有文本,請(qǐng)問(wèn)是否繼續(xù)(y:繼續(xù); n:返回): ')
if 用戶選擇:
if 用戶選擇 in 'yY':
畫(huà)板.消息(綠字('您選擇了繼續(xù),感謝信任...'))
確認(rèn)覆蓋 = True
break
elif 用戶選擇 in 'nN':
畫(huà)板.消息(紅字('您選擇了返回,您是一個(gè)謹(jǐn)慎的人'))
確認(rèn)覆蓋 = False
break
else:
畫(huà)板.提示錯(cuò)誤('您輸入了非期望的指示')
else:
畫(huà)板.提示錯(cuò)誤('您沒(méi)有輸入任何值')
if 確認(rèn)覆蓋:
pass
else:
pass??以上代碼中,我們將用戶輸入的input邏輯和判斷邏輯放入一個(gè) while 循環(huán)中,并在用戶輸入非法時(shí),循環(huán)提示用戶輸入,直到用戶輸入了預(yù)期的信息。
效果如下:

通過(guò)使用 while True 循環(huán),我們?yōu)橛脩籼峁┝搜a(bǔ)救的機(jī)會(huì),提高了交互的使用體驗(yàn)和健壯性。
邏輯封裝
以上所設(shè)計(jì)的用戶交互邏輯,在 DebugInfo 模塊中已經(jīng)進(jìn)行了封裝,可以通過(guò) 交互接口類 使用封裝好的功能。
如下是使用 DebugInfo.交互接口類 實(shí)現(xiàn)的用戶交互邏輯的代碼:
# -*- coding:UTF-8 -*-
# region 引入必要依賴
from DebugInfo.DebugInfo import *
# endregion
if __name__ == "__main__":
畫(huà)板: 打印模板 = 打印模板(False)
畫(huà)板.執(zhí)行位置(__file__)
交互端: 交互接口類 = 交互接口類()
畫(huà)板.消息('程序已經(jīng)開(kāi)始運(yùn)行...')
畫(huà)板.消息('生成新的 id_rsa.pub 文檔...')
# 要求用戶確認(rèn)是否繼續(xù)
用戶選擇 = 交互端.發(fā)起文本交互(輸入提示='此操作將會(huì)刪除原有文本,請(qǐng)問(wèn)是否繼續(xù)(y:繼續(xù); n:返回)',限定范圍='yYnN',畫(huà)板=畫(huà)板.副本)
if 用戶選擇 in 'yY':
畫(huà)板.消息(綠字('您選擇了繼續(xù),感謝信任...'))
elif 用戶選擇 in 'nN':
畫(huà)板.消息(紅字('您選擇了返回,您是一個(gè)謹(jǐn)慎的人'))??以上代碼中,我們通過(guò)使用 用戶選擇 = 交互端.發(fā)起文本交互(輸入提示='此操作將會(huì)刪除原有文本,請(qǐng)問(wèn)是否繼續(xù)(y:繼續(xù); n:返回)',限定范圍='yYnN',畫(huà)板=畫(huà)板.副本) 發(fā)起與用戶的交互,并指定了用戶輸入反饋的范圍是 ‘yYnN’,然后我們只需要等待用戶交互完成后確認(rèn)用戶的決策就好了,下面是運(yùn)行的效果:

??上面的運(yùn)行效果中,我們發(fā)現(xiàn)當(dāng)用戶輸入非預(yù)期的值時(shí),程序還善意的提醒了用戶需要輸入的字符范圍,避免了用戶手足無(wú)措的尷尬。
小結(jié)
以上就是今天分享的 DebugInfo 模塊提供的 交互接口類 的用戶交互功能了,更多關(guān)于python 命令行界面用戶交互的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
POC漏洞批量驗(yàn)證程序Python腳本編寫(xiě)
這篇文章主要為大家介紹了POC漏洞批量驗(yàn)證程序Python腳本編寫(xiě)的完整示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02
關(guān)于python實(shí)現(xiàn)常用的相似度計(jì)算方法
這篇文章主要介紹了關(guān)于python實(shí)現(xiàn)常用的相似度計(jì)算方法,最初的相似度計(jì)算是為了表征向量的重合程度的,在這里最經(jīng)典的就是余弦相似度了,當(dāng)然使用正弦或者是正切等等三角函數(shù)也都是可以的,需要的朋友可以參考下2023-07-07
Python結(jié)合FFmpeg實(shí)現(xiàn)批量提取視頻音頻
在日常開(kāi)發(fā)或音頻處理場(chǎng)景中,我們經(jīng)常需要從大量視頻文件中批量提取音頻,本文介紹一種 使用 Python 調(diào)用 FFmpeg 的通用方案,同時(shí)支持 Windows、macOS 和 Linux,有需要的小伙伴可以了解下2026-01-01
python基于機(jī)器學(xué)習(xí)預(yù)測(cè)股票交易信號(hào)
近年來(lái),隨著技術(shù)的發(fā)展,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)在金融資產(chǎn)量化研究上的應(yīng)用越來(lái)越廣泛和深入。目前,大量數(shù)據(jù)科學(xué)家在Kaggle網(wǎng)站上發(fā)布了使用機(jī)器學(xué)習(xí)/深度學(xué)習(xí)模型對(duì)股票、期貨、比特幣等金融資產(chǎn)做預(yù)測(cè)和分析的文章。本文就來(lái)看看如何用python預(yù)測(cè)股票交易信號(hào)2021-05-05
python利用 pytesseract快速識(shí)別提取圖片中的文字((圖片識(shí)別)
本文介紹了tesseract的python調(diào)用,也就是pytesseract庫(kù),其中還有一些其他的內(nèi)容并沒(méi)有涉及,僅涉及到了圖片提取文字,如果你對(duì)其感興趣,可以深入探索一下,也希望能和我探討一下2022-11-11

