إذا كنت ترغب في جعل واجهة سطر الأوامر الخاصة بك أكثر تفاعلية وديناميكية، فقد يكون بناء نظام تفاعل الأوامر في الوقت الفعلي هو الحل. من خلال الاستفادة من إمكانات الاستبطان في Python، والنقر لإدارة الأوامر، وRich لتنسيق المخرجات، يمكنك إنشاء واجهة سطر أوامر (CLI) قوية ومرنة تستجيب بذكاء لإدخال المستخدم. بدلاً من تشفير كل أمر يدويًا، يمكن لسطر الأوامر الخاص بك اكتشاف الأوامر وتنفيذها تلقائيًا، مما يجعل تجربة المستخدم أكثر سلاسة وجاذبية.
فوضى وحدة التحكم الملونة: حيث تجتمع أوامر النقر مع الإخراج الغني — لأنه حتى الجهاز الطرفي يحب التباهي بأناقة!
يعمل النقر على تبسيط إدارة الأوامر، وتحليل الوسيطات، وإنشاء المساعدة. كما أنه يسمح بسهولة هيكلة الأوامر والتعامل مع الخيارات.
يمكّنك Rich من إخراج Markdown بتنسيق جميل مباشرةً في الوحدة الطرفية، مما يجعل النتائج ليست وظيفية فحسب، بل أيضًا جذابة بصريًا.
من خلال الجمع بين هاتين المكتبتين مع استبطان Python، يمكنك إنشاء ميزة دردشة تفاعلية تكتشف الأوامر وتنفذها ديناميكيًا أثناء عرض المخرجات بتنسيق غني وقابل للقراءة. للحصول على مثال عملي، راجع كيف يستخدم StoryCraftr نهجًا مشابهًا لتبسيط سير عمل الكتابة المستندة إلى الذكاء الاصطناعي: https://storycraftr.app.
يقوم أمر الدردشة بتهيئة الجلسة، مما يسمح للمستخدمين بالتفاعل مع واجهة سطر الأوامر (CLI). هنا، نقوم بالتقاط مدخلات المستخدم، والتي سيتم تعيينها ديناميكيًا لأوامر النقر المناسبة.
import os import click import shlex from rich.console import Console from rich.markdown import Markdown console = Console() @click.command() @click.option("--project-path", type=click.Path(), help="Path to the project directory") def chat(project_path=None): """ Start a chat session with the assistant for the given project. """ if not project_path: project_path = os.getcwd() console.print( f"Starting chat for [bold]{project_path}[/bold]. Type [bold green]exit()[/bold green] to quit." ) # Start the interactive session while True: user_input = console.input("[bold blue]You:[/bold blue] ") # Handle exit if user_input.lower() == "exit()": console.print("[bold red]Exiting chat...[/bold red]") break # Call the function to handle command execution execute_cli_command(user_input)
باستخدام تحليل لغة بايثون، نكتشف الأوامر المتاحة وننفذها ديناميكيًا. أحد الأجزاء المهمة هنا هو أن أوامر النقر هي وظائف مزخرفة. لتنفيذ المنطق الفعلي، نحتاج إلى استدعاء الدالة غير المزخرفة (أي رد الاتصال).
إليك كيفية تنفيذ الأوامر ديناميكيًا باستخدام الاستبطان والتعامل مع ديكورات Click:
import inspect import your_project_cmd # Replace with your actual module containing commands command_modules = {"project": your_project_cmd} # List your command modules here def execute_cli_command(user_input): """ Function to execute CLI commands dynamically based on the available modules, calling the undecorated function directly. """ try: # Use shlex.split to handle quotes and separate arguments correctly parts = shlex.split(user_input) module_name = parts[0] command_name = parts[1].replace("-", "_") # Replace hyphens with underscores command_args = parts[2:] # Keep the rest of the arguments as a list # Check if the module exists in command_modules if module_name in command_modules: module = command_modules[module_name] # Introspection: Get the function by name if hasattr(module, command_name): cmd_func = getattr(module, command_name) # Check if it's a Click command and strip the decorator if hasattr(cmd_func, "callback"): # Call the underlying undecorated function cmd_func = cmd_func.callback # Check if it's a callable (function) if callable(cmd_func): console.print( f"Executing command from module: [bold]{module_name}[/bold]" ) # Directly call the function with the argument list cmd_func(*command_args) else: console.print( f"[bold red]'{command_name}' is not a valid command[/bold red]" ) else: console.print( f"[bold red]Command '{command_name}' not found in {module_name}[/bold red]" ) else: console.print(f"[bold red]Module {module_name} not found[/bold red]") except Exception as e: console.print(f"[bold red]Error executing command: {str(e)}[/bold red]")
دعونا نفكر في بعض نماذج الأوامر ضمن وحدة المشروع التي يمكن للمستخدمين الاتصال بها بشكل تفاعلي عبر الدردشة:
@click.group() def project(): """Project management CLI.""" pass @project.command() def init(): """Initialize a new project.""" console.print("[bold green]Project initialized![/bold green]") @project.command() @click.argument("name") def create(name): """Create a new component in the project.""" console.print(f"[bold cyan]Component {name} created.[/bold cyan]") @project.command() def status(): """Check the project status.""" console.print("[bold yellow]All systems operational.[/bold yellow]")
لتشغيل نظام الدردشة التفاعلية:
python your_cli.py chat --project-path /path/to/project
بمجرد بدء الجلسة، يمكن للمستخدمين إدخال أوامر مثل:
You: project init You: project create "Homepage"
سيتم عرض الإخراج بطريقة جيدة التنسيق باستخدام Rich Markdown:
[bold green]Project initialized![/bold green] [bold cyan]Component Homepage created.[/bold cyan]
من خلال الجمع بين النقر لإدارة الأوامر، وتنسيق Rich for Markdown، واستبطان Python، يمكننا إنشاء نظام دردشة قوي وتفاعلي لـ CLIs. يتيح لك هذا الأسلوب اكتشاف الأوامر وتنفيذها ديناميكيًا أثناء تقديم المخرجات بتنسيق أنيق وقابل للقراءة.
النقاط الرئيسية:
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3