python命令行執(zhí)行方法及技巧分享
引言
在Python編程中,命令行工具是一種強(qiáng)大且高效的交互方式。通過(guò)命令行,我們可以直接運(yùn)行Python腳本,處理數(shù)據(jù),執(zhí)行系統(tǒng)任務(wù)等。

步驟一:編寫Python腳本
首先,我們需要?jiǎng)?chuàng)建一個(gè)Python文件。在任意文本編輯器(如Notepad、Visual Studio Code或PyCharm)中,新建一個(gè)文件,并將其命名為hello.py(擴(kuò)展名為.py表明這是一個(gè)Python文件)。在文件中輸入以下簡(jiǎn)單代碼:
# hello.py 文件內(nèi)容
print("Hello, World!")步驟二:理解Python解釋器
Python解釋器是執(zhí)行Python代碼的程序。在大多數(shù)安裝了Python的系統(tǒng)中,都默認(rèn)安裝了Python解釋器。
步驟三:在命令行中執(zhí)行Python腳本
打開(kāi)命令行終端(Windows用戶可按Win+R鍵,輸入cmd后回車;Mac和Linux用戶可以在Terminal應(yīng)用中操作)。
使用
cd命令切換到你的Python腳本所在的目錄。例如,如果hello.py位于桌面上,則可以輸入:對(duì)于Windows用戶:
cd C:\Users\YourUsername\Desktop對(duì)于Mac/Linux用戶:
cd /Users/YourUsername/Desktop確認(rèn)當(dāng)前路徑下有你的Python腳本文件,可以通過(guò)
ls命令(Mac/Linux)或dir命令(Windows)查看。運(yùn)行Python腳本,輸入以下命令并回車:
python hello.py
如果一切正常,你應(yīng)該能在命令行界面看到輸出的"Hello, World!"。
進(jìn)階技巧
指定Python版本執(zhí)行:如果你的電腦上安裝了多個(gè)Python版本,可以通過(guò)指定完整路徑來(lái)選擇使用哪個(gè)版本的Python解釋器執(zhí)行腳本,如
C:\Python37\python.exe hello.py。模塊化執(zhí)行:如果你的Python腳本定義了一個(gè)主函數(shù)(如
main()),可以在命令行中直接調(diào)用該函數(shù),這通常在大型項(xiàng)目中更為常見(jiàn):
# hello.py 文件內(nèi)容
def main():
print("Hello, World!")
if __name__ == "__main__":
main()在命令行中依然執(zhí)行 python hello.py,由于if條件判斷,main()函數(shù)會(huì)被自動(dòng)執(zhí)行。
命令行參數(shù)傳遞:Python還允許我們?cè)诿钚兄邢蚰_本傳遞參數(shù),這些參數(shù)可以通過(guò)
sys.argv訪問(wèn)。例如:
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,將會(huì)輸出 "Hello, Alice!"。
以上就是Python命令行執(zhí)行文件的基本操作和一些進(jìn)階技巧。
多參數(shù)傳遞與處理
在實(shí)際開(kāi)發(fā)中,我們常常需要向Python腳本傳遞多個(gè)命令行參數(shù)。Python的sys.argv列表提供了這樣的功能,其中sys.argv[0]是腳本名本身,從sys.argv[1:]開(kāi)始則是傳入的參數(shù)。
下面是一個(gè)處理多參數(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
運(yùn)行后,輸出將是 "Hello, Alice Smith!"。
為了更優(yōu)雅地處理命令行參數(shù),Python還提供了一個(gè)強(qiáng)大的第三方庫(kù) argparse,可以用來(lái)創(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,效果和前面的例子一樣,但通過(guò)argparse庫(kù),你可以添加更復(fù)雜、更靈活的參數(shù)選項(xiàng)和驗(yàn)證邏輯。
接下來(lái)我們展示如何使用argparse處理更多復(fù)雜場(chǎng)景,例如添加可選參數(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')
# 添加一個(gè)可選的問(wèn)候語(yǔ)參數(shù),默認(rèn)為"Hello"
parser.add_argument('-g', '--greeting', default='Hello', help='The greeting message')
# 添加一個(gè)可選的年齡參數(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í)行腳本時(shí),你可以提供更多的選項(xiàng):
默認(rèn)情況:
python hello.py Alice Smith自定義問(wèn)候語(yǔ):
python hello.py Alice Smith -g "Hi there"提供年齡信息:
python hello.py Alice Smith -a 30同時(shí)指定問(wèn)候語(yǔ)和年齡:
python hello.py Alice Smith -g "Hey" -a 25
通過(guò)這種方式,你的Python腳本可以更加靈活地處理多種輸入?yún)?shù),提高其可用性和擴(kuò)展性。當(dāng)然,我們可以進(jìn)一步擴(kuò)展argparse的使用,包括添加標(biāo)志參數(shù)、設(shè)置參數(shù)默認(rèn)值、以及定義參數(shù)組以更好地組織和解釋命令行選項(xiàng):???????
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')
# 添加一個(gè)可選的問(wèn)候語(yǔ)參數(shù),默認(rèn)為"Hello"
parser.add_argument('-g', '--greeting', default='Hello', help='The greeting message')
# 添加一個(gè)布爾型標(biāo)志參數(shù),用于控制詳細(xì)輸出
parser.add_argument('-v', '--verbose', action='store_true', help='Verbose output for debugging purposes')
# 添加一個(gè)名為'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)在,你可以通過(guò)-v或--verbose來(lái)開(kāi)啟詳細(xì)的調(diào)試信息輸出:
python hello.py Alice Smith -v -a 30
這樣運(yùn)行腳本將會(huì)顯示詳細(xì)的參數(shù)信息,然后再執(zhí)行正常的問(wèn)候邏輯。這個(gè)例子展示了如何利用argparse提供的強(qiáng)大功能來(lái)設(shè)計(jì)和實(shí)現(xiàn)復(fù)雜的命令行接口。
我們還可以進(jìn)一步擴(kuò)展argparse的功能,包括處理列表類型的參數(shù)。以下是一個(gè)示例,該腳本接受一個(gè)或多個(gè)興趣愛(ài)好作為參數(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')
# 添加可選的問(wèn)候語(yǔ)參數(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')
# 添加一個(gè)名為'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)在,你可以通過(guò)多次指定--hobby來(lái)傳遞多個(gè)興趣愛(ài)好:
python hello.py Alice Smith -v -a 30 --hobby reading --hobby painting --hobby hiking
我們還可以進(jìn)一步豐富命令行參數(shù)的處理,比如添加子命令功能和文件輸入輸出的支持。下面是一個(gè)包含子命令和從文件讀取參數(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)在,你可以通過(guò)greet子命令直接提供參數(shù),或者通過(guò)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腳本在命令行中的功能就變得更加豐富和靈活了。
我們還可以進(jìn)一步增強(qiáng)命令行工具的功能,例如添加環(huán)境變量的支持以及處理不同類型的輸入輸出格式。以下是一個(gè)讀取環(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)問(wèn)候語(yǔ)
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è)每行包含兩個(gè)字段:first_name 和 last_name
process_data([tuple(row) for row in data], args.greeting)
if
name
== "
__main__
":
main()現(xiàn)在,這個(gè)腳本可以讀取環(huán)境變量DEFAULT_GREETING設(shè)置默認(rèn)的問(wèn)候語(yǔ),并通過(guò)命令行接收一個(gè)CSV文件路徑作為參數(shù)。CSV文件中的每一行應(yīng)包含兩個(gè)人名(用逗號(hào)分隔)。運(yùn)行腳本時(shí),它會(huì)依次對(duì)每一個(gè)人發(fā)出問(wèn)候。
創(chuàng)建一個(gè)名為names.csv的文件,內(nèi)容如下:???????
Alice,Smith Bob,Doe Charlie,Wong
最后執(zhí)行腳本:
python hello.py names.csv
輸出結(jié)果將會(huì)是:???????
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
分享一枚pycharm激活碼適用所有pycharm版本我的pycharm2020.2.3激活成功
這篇文章主要分享一枚pycharm激活碼適用所有pycharm版本我的pycharm2020.2.3激活成功,需要的朋友可以參考下2020-11-11
python使用xlsx和pandas處理Excel表格的操作步驟
python的神器pandas庫(kù)就可以非常方便地處理excel,csv,矩陣,表格 等數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于python使用xlsx和pandas處理Excel表格的操作步驟,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01
Tensorflow實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)用于人臉關(guān)鍵點(diǎn)識(shí)別
這篇文章主要介紹了Tensorflow實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)用于人臉關(guān)鍵點(diǎn)識(shí)別,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Python實(shí)現(xiàn)字典序列ChainMap
容器數(shù)據(jù)類型包括數(shù)組list,字典dict以及元組tuple等。本篇主要介紹了ChainMap字典序列的使用,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06
關(guān)于windows下Tensorflow和pytorch安裝教程
Tensorflow是廣泛使用的實(shí)現(xiàn)機(jī)器學(xué)習(xí)以及其它涉及大量數(shù)學(xué)運(yùn)算的算法庫(kù)之一。這篇文章主要介紹了Tensorflow和pytorch安裝(windows安裝),需要的朋友可以參考下2020-02-02
python實(shí)現(xiàn)對(duì)doc,txt,xls文檔的讀寫操作
這篇文章主要介紹了python實(shí)現(xiàn)對(duì)doc,txt,xls文檔的讀寫操作,正如標(biāo)題所見(jiàn),文章包括三個(gè)部分python實(shí)現(xiàn)對(duì)doc文檔的讀取、python實(shí)現(xiàn)對(duì)txt文檔的讀取和python實(shí)現(xiàn)對(duì)xls表格的讀取,需要的朋友可以參考一下2022-04-04
基于Tensorflow使用CPU而不用GPU問(wèn)題的解決
今天小編就為大家分享一篇基于Tensorflow使用CPU而不用GPU問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02

