透過前面幾章的學習,我們學會了如何使用python指令碼,對作業系統執行檔資料夾的增刪改查,執行作業系統系統命令並使用正規表式處理返回結果,並對返回結果進行二次加工和使用。
本次,我們為了使我們的python自動化指令碼更為靈活,我們就需要學習下如何使我們的python指令碼處理外部輸入 和輸出,透過外部輸入的不同,來控制指令碼的不同功能。
最簡單的輸入範例:
name = input("Please input a name: ")print("Hello, ", name)
執行結果如上圖所示
下面我們來一個稍微復雜點的範例:
def to_seconds(hours, minutes, seconds): return hours*3600 + minutes*60 + secondsprint("Welcome to this time converter")cont = "y"while cont.lower() == "y": hours = int(input("Enter the number of hours: ")) minutes = int(input("Enter the number of minutes: ")) seconds = int(input("Enter the number of seconds: ")) print("That's {} seconds".format(to_seconds(hours, minutes, seconds))) print() cont = input("Do you want to do another conversion? [y to continue] ")print("Good bye!")
執行結果如下所示:
執行結果
輸入y可以繼續進行時間轉換,輸出其它任意字元結束。
這裏比較關鍵的兩個函式的使用:
- input 函式, 括弧內為提示字串,會讀取標準輸入並返回一個字串型別的變量
- int 函式, 可以對字串入參進行型別轉換,轉換為int型別,參與運算
上面的python基本函式使用,如果大家感興趣,後續多開幾期給大家講解。
下面我們介紹第二種外部輸入方式,那就是linux 系統的環境變量 。
程式碼範例如下:
>>> import os>>> print("HOME: " + os.environ.get("HOME", ""))HOME: /home/chen // 打印結果>>> print("SHELL: " + os.environ.get("SHELL", ""))SHELL: /bin/bash // 打印結果>>> print("FRUIT: " + os.environ.get("FRUIT", ""))FRUIT: // 環境變量中沒有FRUIT變量,直接返回空字串
如果我們想讓FRUIT 有值,則可以在linux shell中執行export 命令,匯出FRUIT變量,然後嘗試一下。
如下圖所示:
匯出環境變量FRUIT
再次嘗試使用python指令碼打印FRUIT 環境變量的值,結果如下:
>>> print("FRUIT: " + os.environ.get("FRUIT", ""))FRUIT: Apple // export 變量之後,我們就可以讀取到結果了
我們可以透過os.environ 方法獲取作業系統當前環境變量資訊,這也是我們在進行自動化指令碼編寫過程中, 一個重要的輸入來源。
下面我們介紹第三種輸入方式,那就是命令列參數 ,我們經常會使用命令列參數進行一些自訂資訊的傳入。
如下,我們做了一個最簡單的命令列輸入參數打印:
import sysprint(sys.argv) // 打印所有命令列參數
執行結果
使用效果如上圖所示,能夠獲取到所有命令列參數。
實際上,我們的sys.argv 參數是一個python 的列表,我們可以根據下標直接獲取任何一個輸入參數的值。
python test.py one two three // 執行python指令碼,帶三個命令列參數print(sys.argv[1])// 會打印one
好了,綜上,python的輸入資訊的幾種方式我們就講完了,大體來說分為三種。
- 透過input 等,使用者互動輸入
- 透過os.environ,直接獲取系統環境變量
- 透過sys.argv 獲取執行python指令碼時的命令列參數
最後,我們看下python 指令碼的輸出,即返回值,正常執行完python指令碼,都會返回0。
不過如果,我們的python指令碼有錯誤的話,那麽需要返回非零數值以表示指令碼執行存在報錯。
我們通常會使用sys.exit() 函式進行錯誤處理,並返回非零值。
下面看一個例子:
import osimport sysfilename = sys.argv[1]if not os.path.exists(filename): with open(filename, "w") as f: f.write("New file created\n")else: print("Error, the file {} already exists".format(filename)) sys.exit(1)// 此處就是如果檔存在,則直接返回非0值// 表示python指令碼執行失敗返回
好的,今天我們暫時就講這麽多,今天的內容最好跟前幾期連貫在一起進行融匯貫通,那麽這樣的話,你就基本掌握了如何寫好一個python自動化指令碼的大多數基本技能了。
最後,還是那句話,你的關註點贊就是我更新的動力。。如果大家有什麽想要學習的內容,卻又苦於無處下手,關註我,留言即可,我隨時寫文章進行分享。