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

Python使用subprocess调用带空格路径的PowerShell脚本报错

Python调用含空格路径的PowerShell脚本解决方案

正确实现代码

通过-File参数明确指定脚本路径,将路径和参数分别作为独立列表项传递,PowerShell就能正确识别带空格的路径:

import subprocess

# 方式1:用原始字符串直接指定路径
result = subprocess.run(
    ['powershell', '-File', r"C:\Path with spaces\Python\CheckProcess\processCheck.ps1", "processName"],
    stdout=subprocess.PIPE,
    text=True
)

# 方式2:用Pathlib规范管理路径
from pathlib import Path
script_path = Path(r"C:\Path with spaces\Python\CheckProcess\processCheck.ps1")
result = subprocess.run(
    ['powershell', '-File', str(script_path), "processName"],
    stdout=subprocess.PIPE,
    text=True
)

# 处理脚本输出
output = result.stdout.strip()
if output == "True":
    # 执行后续逻辑
    print("监控目标存在")
else:
    print("监控目标不存在")

错误原因分析

你之前的尝试都踩了PowerShell调用的关键坑:

  1. 未指定-File参数:
    直接传递脚本路径时,PowerShell会把路径当作命令片段解析,空格会被当作参数分隔符,导致它只识别到C:\Path就截断,报"The term 'C:\Path' is not recognized"错误。-File参数是核心,它会告诉PowerShell:接下来的参数是完整的脚本文件路径,即使包含空格也会整体识别。

  2. 错误包裹引号:
    用单/双引号包裹路径作为单个参数时,PowerShell会把引号也当作路径的一部分,导致找不到脚本文件,同时后续的processName会被当成PowerShell的表达式语句,报"Unexpected token 'processName'"错误。

  3. 字符串转义问题:
    未使用原始字符串(r"")时,路径中的\P、\w等会被Python解析为Unicode转义字符,引发"unicodeescape codec can't decode bytes"语法错误,必须用原始字符串或者双反斜杠(\\)转义路径。

补充说明

  • text=True(Python 3.7及以上版本支持)可让stdout直接返回字符串,省去手动解码步骤。
  • 若脚本无法执行,检查PowerShell执行策略:可临时执行Set-ExecutionPolicy RemoteSigned(需管理员权限)允许本地脚本运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:50:51