You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Python argparse添加带强制路径的-d/--directory参数及关联约束

Python Argparse Script with Conditional Directory Requirement

Sure thing! Here's a robust implementation that enforces your specified rules for the -d/--directory argument, whether it's used alone or alongside -a, -b, or -c options.

Full Script Code

import argparse
import os

def main():
    # Initialize argument parser with a descriptive message
    parser = argparse.ArgumentParser(description="Example script enforcing conditional directory requirements")
    
    # Add optional flag arguments (-a, -b, -c) that don't require values
    parser.add_argument('-a', action='store_true', help='Enable feature A')
    parser.add_argument('-b', action='store_true', help='Enable feature B')
    parser.add_argument('-c', action='store_true', help='Enable feature C')
    
    # Add directory argument - marked as optional here, but we'll enforce rules manually
    parser.add_argument('-d', '--directory', help='Target directory path (required if -a/-b/-c is used, or if -d is specified)')
    
    # Parse the input arguments
    args = parser.parse_args()
    
    # Rule 1: If -d is provided, it must have a non-empty path value
    if args.directory is not None and not args.directory.strip():
        parser.error("The -d/--directory argument requires a valid directory path when specified")
    
    # Rule 2: If any of -a/-b/-c are enabled, -d must be provided with a path
    if (args.a or args.b or args.c) and args.directory is None:
        parser.error("The -d/--directory argument is mandatory when using -a/-b/-c options")
    
    # Optional: Validate that the specified directory actually exists (remove if not needed)
    if args.directory is not None and not os.path.isdir(args.directory):
        parser.error(f"Error: Directory '{args.directory}' does not exist")
    
    # --------------------------
    # Your script logic goes here
    # --------------------------
    print("✅ Arguments parsed successfully!")
    if args.directory:
        print(f"📂 Target directory: {args.directory}")
    if args.a:
        print("🔹 Feature A is enabled")
    if args.b:
        print("🔹 Feature B is enabled")
    if args.c:
        print("🔹 Feature C is enabled")

if __name__ == "__main__":
    main()

Key Features Explained

  • Flag Options (-a, -b, -c): These are simple boolean flags—using them just sets their value to True without requiring additional input.
  • Directory Argument (-d/--directory): We don't set required=True directly because it's only mandatory in specific cases. Instead, we add custom validation logic:
    1. If a user types -d without providing a path (e.g., python script.py -d), the script throws a clear error.
    2. If any of -a, -b, or -c are used, the script ensures -d is provided with a valid path.
  • Optional Directory Validation: The script checks if the specified directory exists—you can remove this block if you don't need it (e.g., if your script creates the directory itself).

Test Cases to Verify Behavior

Let's walk through some scenarios to confirm the script works as expected:

  • ❌ python script.py -d → Throws error: The -d/--directory argument requires a valid directory path when specified
  • ❌ python script.py -a → Throws error: The -d/--directory argument is mandatory when using -a/-b/-c options
  • ✅ python script.py → Runs successfully (no flags or directory needed)
  • ✅ python script.py -d ./my_existing_dir → Runs successfully, prints the directory path
  • ✅ python script.py -b -d ./project_files → Runs successfully, enables feature B and uses the specified directory

内容的提问来源于stack exchange,提问作者abc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:24:26