Python命令行脚本是一种通过命令行界面(CLI)运行的Python程序,它允许用户与程序进行交互,传递参数,并执行特定任务,Python因其简洁的语法和强大的标准库,成为编写命令行脚本的理想选择,下面将详细介绍Python命令行脚本的创建、运行、参数处理以及高级功能。

创建一个简单的Python命令行脚本非常容易,只需创建一个以.py为扩展名的文件,并在文件中编写Python代码,一个简单的脚本hello.py
可以这样写:
print("Hello, World!")
保存后,打开终端或命令提示符,导航到脚本所在目录,然后运行python hello.py
(在Python 3中可能需要使用python3 hello.py
),终端将输出“Hello, World!”,这是最基础的命令行脚本形式。
为了增强脚本的灵活性,通常需要处理用户输入的参数,Python内置的sys
模块可以获取命令行参数。sys.argv
是一个列表,其中第一个元素是脚本名称,后续元素是用户传入的参数,修改hello.py
如下:
import sys name = sys.argv[1] if len(sys.argv) > 1 else "World" print(f"Hello, {name}!")
运行python hello.py Alice
将输出“Hello, Alice!”,如果未提供参数,则默认输出“Hello, World!”,这种方式适合简单的参数处理,但当参数较多时,使用argparse
模块会更高效。

argparse
是Python标准库中用于解析命令行参数的强大工具,它支持位置参数、可选参数、参数类型、默认值、帮助信息等复杂功能,以下是一个使用argparse
的示例:
import argparse parser = argparse.ArgumentParser(description="A simple greeting script.") parser.add_argument("name", help="The name to greet") parser.add_argument("--times", type=int, default=1, help="Number of times to greet") args = parser.parse_args() for _ in range(args.times): print(f"Hello, {args.name}!")
运行python hello.py --times 3 Bob
将输出三次“Hello, Bob!”。argparse
会自动生成帮助信息,运行python hello.py -h
即可查看。
除了参数处理,Python命令行脚本还可以与其他命令行工具结合使用,通过subprocess
模块可以调用外部命令并获取其输出,以下是一个示例,使用subprocess
运行ls
命令(在Windows上可能是dir
):
import subprocess result = subprocess.run(["ls", "-l"], capture_output=True, text=True) print(result.stdout)
这将列出当前目录的详细文件信息。subprocess
还支持更复杂的交互,如管道和重定向。

为了提升用户体验,可以添加进度条或彩色输出。tqdm
库可以轻松实现进度条,而colorama
库可以在终端中输出彩色文本。
from tqdm import tqdm import time for i in tqdm(range(10)): time.sleep(0.1)
运行后将显示一个动态进度条,彩色输出示例:
from colorama import Fore, Style print(Fore.RED + "This is red text" + Style.RESET_ALL)
Python命令行脚本还可以打包为可执行文件,方便分发,使用PyInstaller
工具可以将脚本转换为独立的可执行文件,安装后运行pyinstaller --onefile script.py
即可生成可执行文件。
以下是一个综合示例,展示了一个完整的命令行脚本功能:
import argparse import sys from tqdm import tqdm def greet(name, times): for _ in tqdm(range(times), desc="Greeting"): print(f"Hello, {name}!") def main(): parser = argparse.ArgumentParser(description="Advanced greeting script.") parser.add_argument("name", help="Name to greet") parser.add_argument("--times", type=int, default=1, help="Number of greetings") args = parser.parse_args() greet(args.name, args.times) if __name__ == "__main__": main()
运行python script.py Alice --times 5
将显示进度条并输出五次问候。
相关问答FAQs:
-
如何处理命令行参数中的可选值?
使用argparse
的nargs
参数可以处理可选值。parser.add_argument("--output", nargs="?", const="default.txt", help="Output file")
表示--output
可以不带值(此时使用const
的值)或带一个值。 -
如何在Python脚本中捕获键盘中断(Ctrl+C)?
使用try-except
块捕获KeyboardInterrupt
异常。try: main() except KeyboardInterrupt: print("\nScript interrupted by user.") sys.exit(1)