題目
假定你有一個無聊的任務,要填充一個網頁或軟件中的許多表格,其中包含一些文本字段。剪貼板讓你不必一次又一次輸入同樣的文本,但剪貼板上一次只有一個內容。如果你有幾段不同的文本需要拷貝粘貼,就不得不一次又一次的標記和拷貝幾個同樣的內容。
可以編寫一個 Python 程序,追蹤幾段文本。這個“多重剪貼板”將被命名為
mcb.pyw(因為“mcb”比輸入“multiclipboard”更簡單)。.pyw 擴展名意味着 Python運行該程序時,不會顯示終端窗口。
該程序將利用一個關鍵字保存每段剪貼板文本。例如,當運行 py mcb.pyw save spam,剪貼板中當前的內容就用關鍵字 spam 保存。通過運行 py mcb.pyw spam,這段文本稍后將重新加載到剪貼板中。如果用戶忘記了都有哪些關鍵字,他們可以運行 py mcb.pyw list,將所有關鍵字的列表復制到剪貼板中。
下面是程序要做的事:
• 針對要檢查的關鍵字,提供命令行參數。
• 如果參數是 save,那么將剪貼板的內容保存到關鍵字。
• 如果參數是 list,就將所有的關鍵字拷貝到剪貼板。
• 否則,就將關鍵詞對應的文本拷貝到剪貼板。
這意味着代碼需要做下列事情:
• 從 sys.argv 讀取命令行參數。
• 讀寫剪貼板。
• 保存並加載 shelf 文件。
代碼
#! python3
# mcb.pyw - Saves and loads pieces of text to the clipboard.
# Usage: py.exe mcb.pyw save <keyword> - Saves clipboard to keyword.
# py.exe mcb.pyw <keyword> - Loads keyword to clipboard.
# py.exe mcb.pyw list - Loads all keywords to clipboard.
# shelve是用來保存shelf文件中
import shelve, pyperclip, sys
mcbShelf = shelve.open('mcb')
# 保存剪切板內容
if len(sys.argv) == 3 and sys.argv[1].lower() == 'save':
mcbShelf[sys.argv[2]] = pyperclip.paste()
elif len(sys.argv) == 2:
# List keywords and load content.
if sys.argv[1].lower() == 'list':
pyperclip.copy(str(list(mcbShelf.keys())))
elif sys.argv[1] in mcbShelf:
pyperclip.copy(mcbShelf[sys.argv[1]])
mcbShelf.close()
