python命令行執(zhí)行方法及技巧分享
引言
在Python編程中,命令行工具是一種強大且高效的交互方式。通過命令行,我們可以直接運行Python腳本,處理數(shù)據(jù),執(zhí)行系統(tǒng)任務(wù)等。
步驟一:編寫Python腳本
首先,我們需要創(chuàng)建一個Python文件。在任意文本編輯器(如Notepad、Visual Studio Code或PyCharm)中,新建一個文件,并將其命名為hello.py
(擴展名為.py表明這是一個Python文件)。在文件中輸入以下簡單代碼:
# hello.py 文件內(nèi)容 print("Hello, World!")
步驟二:理解Python解釋器
Python解釋器是執(zhí)行Python代碼的程序。在大多數(shù)安裝了Python的系統(tǒng)中,都默認(rèn)安裝了Python解釋器。
步驟三:在命令行中執(zhí)行Python腳本
打開命令行終端(Windows用戶可按Win+R鍵,輸入cmd后回車;Mac和Linux用戶可以在Terminal應(yīng)用中操作)。
使用
cd
命令切換到你的Python腳本所在的目錄。例如,如果hello.py
位于桌面上,則可以輸入:對于Windows用戶:
cd C:\Users\YourUsername\Desktop
對于Mac/Linux用戶:
cd /Users/YourUsername/Desktop
確認(rèn)當(dāng)前路徑下有你的Python腳本文件,可以通過
ls
命令(Mac/Linux)或dir
命令(Windows)查看。運行Python腳本,輸入以下命令并回車:
python hello.py
如果一切正常,你應(yīng)該能在命令行界面看到輸出的"Hello, World!"。
進階技巧
指定Python版本執(zhí)行:如果你的電腦上安裝了多個Python版本,可以通過指定完整路徑來選擇使用哪個版本的Python解釋器執(zhí)行腳本,如
C:\Python37\python.exe hello.py
。模塊化執(zhí)行:如果你的Python腳本定義了一個主函數(shù)(如
main()
),可以在命令行中直接調(diào)用該函數(shù),這通常在大型項目中更為常見:
# hello.py 文件內(nèi)容 def main(): print("Hello, World!") if __name__ == "__main__": main()
在命令行中依然執(zhí)行 python hello.py
,由于if條件判斷,main()
函數(shù)會被自動執(zhí)行。
命令行參數(shù)傳遞:Python還允許我們在命令行中向腳本傳遞參數(shù),這些參數(shù)可以通過
sys.argv
訪問。例如:
import sys def main(name): print(f"Hello, {name}!") if name == " __main__ ": if len(sys.argv) > 1: main(sys.argv[1]) else: print("Please provide a name.")
在命令行中執(zhí)行 python hello.py Alice
,將會輸出 "Hello, Alice!"。
以上就是Python命令行執(zhí)行文件的基本操作和一些進階技巧。
多參數(shù)傳遞與處理
在實際開發(fā)中,我們常常需要向Python腳本傳遞多個命令行參數(shù)。Python的sys.argv
列表提供了這樣的功能,其中sys.argv[0]
是腳本名本身,從sys.argv[1:]
開始則是傳入的參數(shù)。
下面是一個處理多參數(shù)的示例:
import sys def main(first_name, last_name): print(f"Hello, {first_name} {last_name}!") if name == " __main__ ": if len(sys.argv) > 2: # 提取命令行參數(shù) first_name = sys.argv[1] last_name = sys.argv[2] main(first_name, last_name) else: print("Please provide both first name and last name.")
保存上述代碼為hello.py
,然后在命令行中執(zhí)行如下命令:
python hello.py Alice Smith
運行后,輸出將是 "Hello, Alice Smith!"。
為了更優(yōu)雅地處理命令行參數(shù),Python還提供了一個強大的第三方庫 argparse
,可以用來創(chuàng)建用戶友好的命令行接口:
import argparse def main(first_name, last_name): print(f"Hello, {first_name} {last_name}!") if name == " __main__ ": # 創(chuàng)建解析器 parser = argparse.ArgumentParser(description="Say hello to someone.") parser.add_argument('first_name', help='The person\'s first name') parser.add_argument('last_name', help='The person\'s last name') # 解析參數(shù) args = parser.parse_args() # 使用解析后的參數(shù)調(diào)用主函數(shù) main(args.first_name, args.last_name)
安裝argparse命令
pip install argparse
同樣,在命令行中執(zhí)行 python hello.py Alice Smith
,效果和前面的例子一樣,但通過argparse
庫,你可以添加更復(fù)雜、更靈活的參數(shù)選項和驗證邏輯。
接下來我們展示如何使用argparse
處理更多復(fù)雜場景,例如添加可選參數(shù)和參數(shù)組:
import argparse def main(first_name, last_name, greeting='Hello', age=None): if age: print(f"{greeting}, {first_name} {last_name}, you are {age} years old!") else: print(f"{greeting}, {first_name} {last_name}!") if name == " __main__ ": # 創(chuàng)建解析器 parser = argparse.ArgumentParser(description="Say hello to someone.") # 添加必需的參數(shù) parser.add_argument('first_name', help='The person\'s first name') parser.add_argument('last_name', help='The person\'s last name') # 添加一個可選的問候語參數(shù),默認(rèn)為"Hello" parser.add_argument('-g', '--greeting', default='Hello', help='The greeting message') # 添加一個可選的年齡參數(shù),并設(shè)置類型為整數(shù) parser.add_argument('-a', '--age', type=int, help='The person\'s age') # 解析命令行參數(shù) args = parser.parse_args() # 使用解析后的參數(shù)調(diào)用主函數(shù) main(args.first_name, args.last_name, args.greeting, args.age)
現(xiàn)在在命令行中執(zhí)行腳本時,你可以提供更多的選項:
默認(rèn)情況:
python hello.py Alice Smith
自定義問候語:
python hello.py Alice Smith -g "Hi there"
提供年齡信息:
python hello.py Alice Smith -a 30
同時指定問候語和年齡:
python hello.py Alice Smith -g "Hey" -a 25
通過這種方式,你的Python腳本可以更加靈活地處理多種輸入?yún)?shù),提高其可用性和擴展性。當(dāng)然,我們可以進一步擴展argparse
的使用,包括添加標(biāo)志參數(shù)、設(shè)置參數(shù)默認(rèn)值、以及定義參數(shù)組以更好地組織和解釋命令行選項:???????
import argparse def main(first_name, last_name, greeting='Hello', verbose=False, age=None): if verbose: print(f"Executing with the following parameters: first_name={first_name}, last_name={last_name}, greeting={greeting}, age={age}") if age: message = f"{greeting}, {first_name} {last_name}, you are {age} years old!" else: message = f"{greeting}, {first_name} {last_name}!" print(message) if name == " __main__ ": # 創(chuàng)建解析器 parser = argparse.ArgumentParser(description="Say hello to someone.") # 添加必需的參數(shù) parser.add_argument('first_name', help='The person\'s first name') parser.add_argument('last_name', help='The person\'s last name') # 添加一個可選的問候語參數(shù),默認(rèn)為"Hello" parser.add_argument('-g', '--greeting', default='Hello', help='The greeting message') # 添加一個布爾型標(biāo)志參數(shù),用于控制詳細(xì)輸出 parser.add_argument('-v', '--verbose', action='store_true', help='Verbose output for debugging purposes') # 添加一個名為'optional'的參數(shù)組,并在其中定義年齡參數(shù) group_optional = parser.add_argument_group('Optional arguments') group_optional.add_argument('-a', '--age', type=int, help='The person\'s age') # 解析命令行參數(shù) args = parser.parse_args() # 使用解析后的參數(shù)調(diào)用主函數(shù) main(args.first_name, args.last_name, args.greeting, args.verbose, args.age)
現(xiàn)在,你可以通過-v或--verbose來開啟詳細(xì)的調(diào)試信息輸出:
python hello.py Alice Smith -v -a 30
這樣運行腳本將會顯示詳細(xì)的參數(shù)信息,然后再執(zhí)行正常的問候邏輯。這個例子展示了如何利用argparse提供的強大功能來設(shè)計和實現(xiàn)復(fù)雜的命令行接口。
我們還可以進一步擴展argparse的功能,包括處理列表類型的參數(shù)。以下是一個示例,該腳本接受一個或多個興趣愛好作為參數(shù):???????
import argparse def main(first_name, last_name, greeting='Hello', verbose=False, age=None, hobbies=[]): if verbose: print(f"使用以下參數(shù)執(zhí)行: first_name={first_name}, last_name={last_name}, greeting={greeting}, age={age}, hobbies={hobbies}") if age: message = f"{greeting}, {first_name} {last_name}, you are {age} years old and enjoy {', '.join(hobbies)}." else: message = f"{greeting}, {first_name} {last_name}. You enjoy {', '.join(hobbies)}." print(message) if name == " __main__ ": # 創(chuàng)建解析器 parser = argparse.ArgumentParser(description="Say hello to someone.") # 添加必需的參數(shù) parser.add_argument('first_name', help='The person\'s first name') parser.add_argument('last_name', help='The person\'s last name') # 添加可選的問候語參數(shù),默認(rèn)為"Hello" parser.add_argument('-g', '--greeting', default='Hello', help='The greeting message') # 添加布爾型標(biāo)志參數(shù)用于詳細(xì)輸出 parser.add_argument('-v', '--verbose', action='store_true', help='Verbose output for debugging purposes') # 添加年齡參數(shù) parser.add_argument('-a', '--age', type=int, help='The person\'s age') # 添加一個名為'hobbies'的列表類型參數(shù),可以多次指定 parser.add_argument('-H', '--hobby', action='append', help='A hobby of the person') # 解析命令行參數(shù) args = parser.parse_args() # 使用解析后的參數(shù)調(diào)用主函數(shù) main(args.first_name, args.last_name, args.greeting, args.verbose, args.age, args.hobby)
現(xiàn)在,你可以通過多次指定--hobby
來傳遞多個興趣愛好:
python hello.py Alice Smith -v -a 30 --hobby reading --hobby painting --hobby hiking
我們還可以進一步豐富命令行參數(shù)的處理,比如添加子命令功能和文件輸入輸出的支持。下面是一個包含子命令和從文件讀取參數(shù)的例子:???????
import argparse import json def greet(first_name, last_name, greeting='Hello', hobbies=None): if hobbies: hobby_message = f" and enjoy {', '.join(hobbies)}" else: hobby_message = "" print(f"{greeting}, {first_name} {last_name}{hobby_message}.") def load_params_from_file(filename): try: with open(filename) as file: params = json.load(file) return params except FileNotFoundError: print(f"Error: The file '{filename}' does not exist.") sys.exit(1) except json.JSONDecodeError: print("Error: Unable to parse the provided file. Please ensure it contains valid JSON.") sys.exit(1) def main(): parser = argparse.ArgumentParser(description="Say hello to someone.") # 添加子命令功能 subparsers = parser.add_subparsers(title="subcommands", dest="command") # 創(chuàng)建'greet'子命令解析器 greet_parser = subparsers.add_parser('greet', help="Greet a person") greet_parser.add_argument('first_name', help='The person\'s first name') greet_parser.add_argument('last_name', help='The person\'s last name') greet_parser.add_argument('-g', '--greeting', default='Hello', help='The greeting message') greet_parser.add_argument('-H', '--hobby', action='append', help='A hobby of the person') # 創(chuàng)建'from-file'子命令解析器 from_file_parser = subparsers.add_parser('from-file', help="Read parameters from a JSON file") from_file_parser.add_argument('filename', help='Path to the JSON file containing parameters') args = parser.parse_args() if args.command == 'greet': greet(args.first_name, args.last_name, args.greeting, args.hobby) elif args.command == 'from-file': params = load_params_from_file(args.filename) greet(params['first_name'], params['last_name'], params.get('greeting', 'Hello'), params.get('hobbies', [])) if name == " __main__ ": main()
現(xiàn)在,你可以通過greet
子命令直接提供參數(shù),或者通過from-file
子命令從JSON文件中讀取參數(shù):???????
# 使用'greet'子命令 python hello.py greet Alice Smith -g "Hi" --hobby reading --hobby writing # 從JSON文件加載參數(shù) python hello.py from-file parameters.json
其中,parameters.json
的內(nèi)容可以是:???????
{ "first_name": "Alice", "last_name": "Smith", "greeting": "Greetings!", "hobbies": ["reading", "writing"] }
這樣,我們的Python腳本在命令行中的功能就變得更加豐富和靈活了。
我們還可以進一步增強命令行工具的功能,例如添加環(huán)境變量的支持以及處理不同類型的輸入輸出格式。以下是一個讀取環(huán)境變量和接受CSV文件作為輸入的示例:???????
import argparse import csv def process_data(data, greeting='Hello'): for first_name, last_name in data: print(f"{greeting}, {first_name} {last_name}!") def main(): parser = argparse.ArgumentParser(description="Say hello to a list of people from input.") # 添加從變量獲取默認(rèn)問候語 default_greeting = 'Hello' parser.add_argument('-g', '--greeting', default=default_greeting, help='The greeting message (default: $default_greeting)') # 添加讀取CSV文件作為輸入?yún)?shù) parser.add_argument('input_file', type=argparse.FileType('r'), help='A CSV file containing names separated by commas') args = parser.parse_args() reader = csv.reader(args.input_file) data = [row for row in reader if len(row) == 2] # 假設(shè)每行包含兩個字段:first_name 和 last_name process_data([tuple(row) for row in data], args.greeting) if name == " __main__ ": main()
現(xiàn)在,這個腳本可以讀取環(huán)境變量DEFAULT_GREETING
設(shè)置默認(rèn)的問候語,并通過命令行接收一個CSV文件路徑作為參數(shù)。CSV文件中的每一行應(yīng)包含兩個人名(用逗號分隔)。運行腳本時,它會依次對每一個人發(fā)出問候。
創(chuàng)建一個名為names.csv
的文件,內(nèi)容如下:???????
Alice,Smith Bob,Doe Charlie,Wong
最后執(zhí)行腳本:
python hello.py names.csv
輸出結(jié)果將會是:???????
Hello, Alice Smith!
Hello, Bob Doe!
Hello, Charlie Wong!
這展示了如何在Python命令行工具中整合多種功能,包括環(huán)境變量、文件輸入以及數(shù)據(jù)處理等。
總結(jié)
到此這篇關(guān)于python命令行執(zhí)行方法及技巧分享的文章就介紹到這了,更多相關(guān)python命令行執(zhí)行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
分享一枚pycharm激活碼適用所有pycharm版本我的pycharm2020.2.3激活成功
這篇文章主要分享一枚pycharm激活碼適用所有pycharm版本我的pycharm2020.2.3激活成功,需要的朋友可以參考下2020-11-11python使用xlsx和pandas處理Excel表格的操作步驟
python的神器pandas庫就可以非常方便地處理excel,csv,矩陣,表格 等數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于python使用xlsx和pandas處理Excel表格的操作步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01Tensorflow實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)用于人臉關(guān)鍵點識別
這篇文章主要介紹了Tensorflow實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)用于人臉關(guān)鍵點識別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03關(guān)于windows下Tensorflow和pytorch安裝教程
Tensorflow是廣泛使用的實現(xiàn)機器學(xué)習(xí)以及其它涉及大量數(shù)學(xué)運算的算法庫之一。這篇文章主要介紹了Tensorflow和pytorch安裝(windows安裝),需要的朋友可以參考下2020-02-02python實現(xiàn)對doc,txt,xls文檔的讀寫操作
這篇文章主要介紹了python實現(xiàn)對doc,txt,xls文檔的讀寫操作,正如標(biāo)題所見,文章包括三個部分python實現(xiàn)對doc文檔的讀取、python實現(xiàn)對txt文檔的讀取和python實現(xiàn)對xls表格的讀取,需要的朋友可以參考一下2022-04-04