pythonfire
工作中會經常需要寫一些命令行腳本,如果還是用if,else判斷用戶輸入實在是太醜陋了。這里介紹幾個python里的命令行腳本庫,可以幫助我們快速開發好用的命令行腳本。
https://docs.python.org/3/library/cmd.html
使用方式是繼承Cmd,實現自己的子類。
參數comletekey是自動補全操作,默認值是Tab, 如果不為None 且readline可用的話,命令會自動完成。
這里的readline指的是python實現的 GNU readline 介面(標准python庫里沒有,Windows系統不支持)。
參數stdin,stdout是輸入輸出流,默認是sys.stdin,sys.stout。
cmd提供了一個簡單的框架,但是功能比較簡單,python還有其他的很多第三方庫可以用來寫命令行程序。
https://www.cnblogs.com/xueweihan/p/12293402.html 這篇文章對比了各個庫的功能,貼在這里:
看起來fire是最簡單的,來試一下。
fire 則是用一種面向廣義對象的方式來玩轉命令行,這種對象可以是類、函數、字典、列表等,它更加靈活,也更加簡單。你都不需要定義參數類型,fire 會根據輸入和參數默認值來自動判斷,這無疑進一步簡化了實現過程。
以下示例為 fire 實現的 計算器程序:
從上述示例可以看出,fire 提供的方式無疑是最簡單、並且最 Pythonic 的了。我們只需關注業務邏輯,而命令行參數的定義則和函數參數的定義融為了一體。
不過,有利自然也有弊,比如 nums 並沒有說是什麼類型,也就意味著輸入字元串'abc'也是合法的,這就意味著一個嚴格的命令行程序必須在自己的業務邏輯中來對期望的類型進行約束。
Ⅱ python網頁跳轉的問題
1.用工具抓取分析網頁跳轉的內部執行邏輯。
2.然後用python代碼實現此邏輯。
3.所有的內容,我早就幫你寫好教程了。
自己去看就可以了:
如何用Python,C#等語言去實現抓取靜態網頁 模擬登陸網站
(此處不給貼地址,請用google搜標題,即可找到地址的)
Ⅲ python 沒有三元運算符嗎
Python沒有三目運算符(?:),但也有類似的替代方案,那就是
true_part if condition else false_part。
比如:
>>>1ifTrueelse0
1
>>>1ifFalseelse0
0
>>>"Fire"ifTrueelse"Water"
'Fire'
>>>"Fire"ifFalseelse"Water"
'Water'
Ⅳ Python報錯typeError: 'tuple' object is not callable
環境:python2.7
網路下,只有幾個例子,有個說是某個函數被重新定義了,導致出問題。
我仔細看了下我的錯誤:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/eventlet-0.14.0-py2.7.egg/eventlet/hubs/hub.py", line 346, in fire_timers
timer()
File "/usr/local/lib/python2.7/dist-packages/eventlet-0.14.0-py2.7.egg/eventlet/hubs/timer.py", line 56, in __call__
cb(*args, **kw)
File "/usr/local/lib/python2.7/dist-packages/eventlet-0.14.0-py2.7.egg/eventlet/greenthread.py", line 194, in main
result = function(*args, **kwargs)
TypeError: 'tuple' object is not callable
然後通過一步步查詢找到出錯語句:
eventlet.spawn(utils.command(cmd))
在自定義的utils.command中,有調用subprocess.Popen和eventlet.sleep,可能是其中哪個出問題了
我因為對結果要求不高,直接將代碼改為:
utils.command(cmd)
然後不再出錯。
沒有進一步查看原先的錯處,個人考慮是某個函數重定義導致錯誤,不過網上也有代碼不規范出錯的
Ⅳ Python語言命令行參數解析接收參數執行腳本的三種方法
在Windows系統上,Python腳本文件當然雙擊就能直接運行。不過我們往往需要在執行腳本的時候還要添加相應的參數,另外在Ubuntu系統中,我們執行文件往往和其他系統或用戶命令一樣,需要在終端中輸入,參數當然也要一並加上。所以機智客這里說的意思是,執行Python腳本(.py文件)時候需要輸入相應參數,這樣程序怎麼寫的方法。
上面這么說可能有點不明不白的,或者有朋友會用但未必知道命令行解析這種表達方式。舉個例子,比如我們在執行一個腳本文件的時候,可能會在CMD或者終端中輸入python demo.py 10或者python demo.py --separator 10後面這個數字就是參數。我們要編寫這樣的腳本或者函數,有哪些方法呢?這里列舉三種常用的。
一個是用系統模塊sys。引入模塊語句是import sys。也就是Python語言的內置庫中的sys.argv。argv通常有argv[0],argv[1],argv[2]這樣幾個參數。基本使用方法是m_sil_len = int(sys.argv[1])傳入第一個參數,sil_th = int(sys.argv[2])傳入第二個參數。如果是簡單一點的參數或者腳本,我們引入了sys。可以直接用這個傳入參數。
一種是用模塊argparse來實現,這是標准庫中推薦的命令行解析模塊。引入模塊語句是import argparse。基本使用方法是引入模塊後,先parser = argparse.ArgumentParser()創建對象,然後調用方法添加參數parser.add_argument("jzk", help="這是關於參數的說明", type=int),之後args = parser.parse_args()使用解析就可以用了。機智客看到這個方法在很多項目腳本中使用。我們在閱讀機器學習AI之類的開源項目,就會發現很多人用的都是這個方法。
還有一個就是用fire模塊,用於生成命令行界面的工具。引入模塊語言是import fire。它默認以-為參數分隔符的。基本使用方法是fire.Fire()。這個不僅可以做命令行的參數解析,還可以還給一個類class添加命令行。所以使用時候括弧里填入函數名或者類名即可,也就是裡面的參數可以是其他Python對象。