TheFuck—Python寫的超實用命令糾正工具

2021-02-20 Python實用寶典

The Fuck 是一款功能強大的、Python編寫的應用程式,可用於糾正控制臺命令中的錯誤,非常強大。此外,用戶還可通過寫Python代碼的方式自定義修復規則。

修復效果如下動圖所示:


更多示例如:

自動識別沒有權限,在命令前面添加 sudo:

➜ apt-get install vim
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

➜ fuck
sudo apt-get install vim [enter/↑/↓/ctrl+c]
[sudo] password for nvbn:
Reading package lists... Done
...


識別到沒有推送到遠程分支,自動追加:

➜ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use
 
    git push --set-upstream origin master

➜ fuck
git push --set-upstream origin master [enter/↑/↓/ctrl+c]
Counting objects: 9, done.
...


識別到拼寫錯誤:

➜ puthon
No command 'puthon' found, did you mean:
 Command 'python' from package 'python-minimal' (main)
 Command 'python' from package 'python3' (main)
zsh: command not found: puthon

➜ fuck
python [enter/↑/↓/ctrl+c]
Python 3.4.2 (default, Oct 8 2014, 13:08:17)
...


如果你不擔心fuck修正的結果是錯誤的,你可以禁用require_confirmation 選項,讓fuck自動運行更正的命令:


➜ apt-get install vim
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

➜ fuck
sudo apt-get install vim
[sudo] password for nvbn:
Reading package lists... Done
...


在開發機上可以這麼做,在生產機器上最好是謹慎一點,不推薦這麼做。

1.安裝

在OS X上,可以通過Homebrew(或在Linux上通過Linuxbrew)安裝The Fuck:


在Ubuntu / Mint上,使用以下命令安裝The Fuck:

sudo apt update
sudo apt install python3-dev python3-pip python3-setuptools
sudo pip3 install thefuck


在FreeBSD上,使用以下命令安裝The Fuck:


在其他系統上, 使用pip安裝The Fuck:

2.配置

接下來需要把這個命令寫入到啟動腳本中,根據你的終端類型,運行相應的命令即可:

Bash

chcp.com 65001 
eval "$(thefuck --alias)"


其中 chcp.com 65001 只有在windows環境下才需要運行。

Zsh:

eval "$(thefuck --alias)"


其他的可見:

https://github.com/nvbn/thefuck/wiki/Shell-aliases

3.原理

其實TheFuck的原理就是規則匹配(正則表達式),如果找到匹配規則的命令,則創建一個命令給用戶選擇或直接運行。

默認情況下的規則有:

cat_dir - 當你嘗試cat目錄的時候,用ls替換cat;

cd_correction – 拼寫檢查和糾正失敗的cd命令;

cd_mkdir – 在進入目錄之前創建目錄;

cd_parent – 更改 cd.. 為cd ..;

dry – 修復類似的重複問題:git git push;

fix_alt_space – 用空格字符代替Alt + Space;

等等,具體可以在官方文檔中找到:
https://github.com/nvbn/thefuck

4. 創建自己的修復規則

要添加自己的規則,在 ~/.config/thefuck/rules 文件夾中,

創建一個文件名為 your-rule-name.py 的規則文件,其中必須包含兩個函數:

match(command: Command) -> bool
get_new_command(command: Command) -> str | list[str]


下面是簡單的 sudo 規則示例:

def match(command):
    return ('permission denied' in command.output.lower()
            or 'EACCES' in command.output)


def get_new_command(command):
    return 'sudo {}'.format(command.script)

# Optional:
enabled_by_default = True

def side_effect(command, fixed_command):
    subprocess.call('chmod 777 .', shell=True)

priority = 1000  # Lower first, default is 1000

requires_output = True


如果命令運行結果出現 permission denied 或者 EACCES,則執行 sudo xxx.

此外,還可以配置side_effect,如果你配置了enabled_by_default = True,side_effect函數內的操作將會被執行,本例中是對當前目錄下的文件夾執行賦權操作: chmod 777 .

大家可以動手試試自己配一個修復命令,還是相當有意思的。

我們的文章到此就結束啦,如果你喜歡今天的Python 實戰教程,請持續關注Python實用寶典。

有任何問題,可以在公眾號後臺回覆:加群,回答相應紅字驗證信息,進入互助群詢問。

原創不易,希望你能在下面點個讚和在看支持我繼續創作,謝謝!

點擊下方閱讀原文可獲得更好的閱讀體驗

Python實用寶典 (pythondict.com)
不只是一個寶典
歡迎關注公眾號:Python實用寶典

相關焦點

  • 截屏、文字提取一氣呵成,超實用OCR開源小工具
    機器之心報導機器之心編輯部這個文本 OCR 小工具,能讓你「所截即所得」。在我們辦公時,是不是經常遇到圖片內容轉文字的需求?你是用什麼工具解決的呢?是手機自帶拍照轉文字功能?還是使用 QQ 裡面的工具?
  • 14-用Python 讀寫 Excel 文件
    最大支持行數為1048576行),人們開始轉向python和R這樣的分析工具了XlsxWriterxlrd&xlwt[2]OpenPyXL[3]Microsoft Excel API[4]介紹可以創建 Excel 2007 或更高版本的 XLSX 文件即 python-excel,含 xlrd、xlwt 和 xlutils 三大模塊,分別提供讀、寫和其他功能可以讀寫 Excel
  • 推薦一些相見恨晚的 Python 庫 「二」
    好了說正事,這篇文章同樣是翻譯自 Awesome Python 的匯總,主要包括:命令行工具庫、Python 版本兼容性庫、計算機視覺庫、並發和並行庫、Python 配置庫、密碼學命令行工具 ( Command-line Tools)創建命令行程序的庫命令行程序開發https://github.com/peterbrittain/asciimaticshttp://builtoncement.com
  • 如何用 Python 執行單行命令
    但有些時候,我僅僅只是想寫一個一次性腳本,不想打開編輯器寫所謂 格式優美 的 Python 語句呢?(正如寫 Perl 一樣隨性)其實在 Python 中也可以使用單行命令,直接用 python -c <command> 即可,雖然這與 Python 之禪中所說的 Readability counts 相悖,但信手拈來,隨便用用還是挺方便的。
  • Python 命令行之旅:使用 docopt 實現 git 命令
    按照慣例,我們要像使用 argparse 一樣使用 docopt 來實現 git 命令。為了讓沒讀過 使用 argparse 實現 git 命令 的小夥伴也能讀明白本文,我們仍會對 git 常用命令和 gitpython 做一個簡單介紹。本系列文章默認使用 Python 3 作為解釋器進行講解。
  • Python基礎篇-13 Python不是內部或外部命令的解決方法
    公眾號關注「專攻python」,設為「星標」重磅文章,第一時間送達!!
  • python命令是如何操作文件file的?
    用到文件,就必然會有創建文件、打開文件、寫文件、複製文件、刪除文件這些操作,下面我們來看看在python中是如何利用命令來操作file文件的。python操作file的命令及使用1.打開和關閉文件file object= open(file_name [, access_mode][, buffering]),通過open命令來打開一個文件。
  • 20行代碼手擼一個命令行英漢翻譯工具
    直到在微博上面看到有個人利用有道翻譯API做了個命令行下面的小工具。可是他是用ruby寫的,對於Python空來說,這怎麼可以呢,於是自己寫一個吧,很簡單的。有道翻譯APIhttp://fanyi.youdao.com/openapi?path=data-mode在這裡簡單申請一個應用即可。
  • Python編程:開發工具(IDE)大匯總(附官方下載)
    最近有多位讀者留言,諮詢更便捷、高效的python編程開發工具(IDE),本文就給大家介紹四款業內常用的python軟體開發工具,並簡單介紹下每款軟體的特點,便於讀者按需選擇合適的學習軟體!python開發工具大匯總一、jupyter notebook IDE簡介—五星推薦jupyter notebook是python學習與開發的一款簡介的
  • 比FUCK更FUCK的「FUCK」
    其中涉及年代最久遠的說法是,15世紀有一首由拉丁文和英文混合所寫的諷刺詩《Flen, flyys and freris(跳蚤,蒼蠅和修道士)》,其中有一行是這樣寫的:「Non sunt in coeli, quia gxddbov xxkxzt pg ifmk.」
  • 如何編寫完美的 Python 命令行程序?
    這篇文章將教你如何編寫完美的 Python 命令行程序,提高團隊的生產力,讓大家的工作更舒適。作者 | Yannick Wolff譯者 | 彎月責編 | 屠敏作為 Python 開發者,我們經常要編寫命令行程序。比如在我的數據科學項目中,我要從命令行運行腳本來訓練模型,以及計算算法的準確率等。
  • Python基礎入門——簡介和環境配置,超實用!
    然後在 "Path" 行,添加 python 安裝路徑即可,所以在後面,添加該路徑即可。ps:記住,路徑直接用分號";"隔開!最後設置成功以後,在cmd命令行,輸入命令"python",就可以有相關顯示。
  • 讓你如紳士般基於描述編寫 Python 命令行工具的開源項目:docopt
    需要先設置解析器,再定義參數,再解析命令行,最後實現業務邏輯。而今天要介紹的 docopt[1]則是站在一個全新的視角來審視命令行。你可曾想過,一個命令行程序的幫助信息其實已然包含了這個命令行的完整元信息,那麼是否可以通過定義幫助信息來定義命令行呢?docopt 就是基於這樣的想法去設計的。本系列文章默認使用 Python 3 作為解釋器進行講解。
  • python:kivy(apk打包工具)在Win10安裝步驟
    只需編寫一套代碼,便可運行於各大桌面及移動平臺上包括 Linux, Windows, OS X, Android, iOS, 以及 Raspberry Pi, Kivy 採用 Python 和 Cython 編寫,在國外已經十分火爆,受關注程度甚至一度超越了老牌的 Python GUI 工具 PyQt。以下是在 Windows 10環境下 安裝 Kivy的具體步驟。
  • 介紹幾款Python性能優化工具
    雖然很多人都認為Python是一個「慢」語言,但其實很多時候,導致程序慢的原因並不是語言的鍋,而是代碼寫得不夠好。所以在程序運行過程中,如果發現運行時間太長或者內存佔用過大,就需要對程序的執行過程進行一些監測,找到有問題的地方,進行優化。今天我們就來分享一些平時能用上的Python性能分析工具。
  • 用Python寫個在線Python的網站怎麼樣
    ,後來我發現一個事情,python裡面的subprocess算是一個很有趣的東西,他可以解釋python自己的代碼,之後就有個想法了,嘗試用subprocess去寫一個在線運行python的網站。那今天我們就來分享一下,如何使用python去寫一個在線python吧!首先,這個東西是結合python的flask框架來完成的。先介紹一下flask框架:Flask也被稱為 「microframework」 ,因為它使用簡單的核心,用 extension 增加其他功能。Flask沒有默認使用的資料庫、窗體驗證工具。
  • python執行系統命令
    在實際開發中,除了編寫python自身的代碼外,還經常需要執行作業系統的命令。
  • Python 命令行參數解析庫argparse
    假設我有一個python程序,姑且叫extract_WRF.py,內部代碼如下例子一,腳本中的main主函數功能簡化為列印出輸入的參數,即:print(zone,input_source_dir,output_source_dir,features,levels)參數有zone,input_source_dir,
  • 如何在Visual Studio開發工具安裝python庫
    工具Visual Studio 2019python環境pip工具那麼,在Visual Studio開發工具中,如何安裝python第三方庫呢?添加新建項,然後選擇空python文件3、點擊工具菜單,然後選擇python,接著是python環境
  • Python打包工具--Pyinstaller詳細介紹
    因為第一次接觸python的時候,就是看到網上有人用Python編寫的工具,可以直接運行在windows機器下。這種脫離編譯環境/虛擬機而單獨運行的能力是我一直期待的,有人會問為什麼不學c++?因為,這老哥頭髮讓我有些慌....