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

Python人脸识别:如何将用户输入目录作为脚本参数传入

解决os.system传递变量参数失效的问题

首先咱们先揪出你代码里的几个关键问题:

  1. 变量没有被正确替换:你在os.system的命令里直接写了--output /home/pi/pi-face-recognition/dataset/name,这里的name是字符串字面量,不是你之前获取的用户输入变量,所以脚本只会把照片存到名为name的固定文件夹里,完全没用到用户输入的名字。

  2. 路径拼写错误:你的--cascade参数路径里有个空格(pi-face recognition),这会导致系统把它当成两个分开的参数,根本找不到级联分类器文件,得改成pi-face-recognition才行。

  3. 目录创建路径不匹配:你用os.makedirs(name)在当前工作目录创建了用户命名的文件夹,但--output指向的是/home/pi/pi-face-recognition/dataset/下的子目录,这俩路径根本不对应,要么调整目录创建的路径,要么修改--output的路径,得统一起来。

接下来给你几种可行的解决方案:

方法一:用f-string拼接命令(Python3.6+推荐)

这是最简洁的方式,直接在字符串里插入变量:

import os
import sys

print("Select operation.")
print("1.Face registration")
print("2.Face Recognition")
choice = input("Enter choice(1/2):")
name = input("Enter your name:")

if choice == '1':
    # 先创建正确的目标目录,加上exist_ok=True避免目录已存在时报错
    output_dir = f"/home/pi/pi-face-recognition/dataset/{name}"
    os.makedirs(output_dir, exist_ok=True)
    # 用f-string把变量插入命令中,同时修正级联路径的空格问题
    os.system(f"python /home/pi/pi-face-recognition/dataset.py --cascade /home/pi/pi-face-recognition/haarcascade_frontalface_default.xml --output {output_dir}")

方法二:用str.format()兼容旧版本Python

如果你的Python版本低于3.6,用这种方式也能实现变量替换:

import os
import sys

print("Select operation.")
print("1.Face registration")
print("2.Face Recognition")
choice = input("Enter choice(1/2):")
name = input("Enter your name:")

if choice == '1':
    output_dir = "/home/pi/pi-face-recognition/dataset/{}".format(name)
    os.makedirs(output_dir, exist_ok=True)
    command = "python /home/pi/pi-face-recognition/dataset.py --cascade /home/pi/pi-face-recognition/haarcascade_frontalface_default.xml --output {}".format(output_dir)
    os.system(command)

方法三:用subprocess模块(更安全可靠)

os.system其实是比较老旧的方式,推荐用subprocess.run(),它能更好地处理参数,避免字符串拼接带来的空格、特殊字符问题:

import os
import sys
import subprocess

print("Select operation.")
print("1.Face registration")
print("2.Face Recognition")
choice = input("Enter choice(1/2):")
name = input("Enter your name:")

if choice == '1':
    output_dir = f"/home/pi/pi-face-recognition/dataset/{name}"
    os.makedirs(output_dir, exist_ok=True)
    # 把每个参数拆分成列表元素,不需要担心空格问题
    subprocess.run([
        "python",
        "/home/pi/pi-face-recognition/dataset.py",
        "--cascade", "/home/pi/pi-face-recognition/haarcascade_frontalface_default.xml",
        "--output", output_dir
    ])

额外提示:

  • 加上exist_ok=True到os.makedirs()里,这样如果用户重复注册同一个名字,不会抛出目录已存在的异常。
  • 确保dataset.py确实能正确接收--output参数,并且会在指定目录下创建照片文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:48:40