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

PyCharm修改PowerShell路径命令:如何避免额外路径拼接?

解决subprocess执行PowerShell cd命令时路径被自动拼接的问题

核心原因

你遇到的路径拼接问题,是因为subprocess默认使用PyCharm的项目根目录作为命令执行的工作目录,当你使用相对路径OneDrive\Desktop\...时,PowerShell会基于这个根目录去查找路径,导致生成了错误的拼接路径。

以下是几种可行的解决方法:

  • 使用绝对路径直接指定目标目录
    把cd命令中的路径改成绝对路径,避免相对路径带来的拼接问题。注意Windows路径中的反斜杠需要转义,或者使用原始字符串:

    import subprocess
    # 转义反斜杠写法
    subprocess.call('powershell.exe cd "C:\\Users\\cubeow\\OneDrive\\Desktop\\OpenPose\\openpose-1.7.0-binaries-win64-gpu-python3.7-flir-3d_recommended"', shell=True)
    # 原始字符串写法(更简洁)
    subprocess.call(r'powershell.exe cd "C:\Users\cubeow\OneDrive\Desktop\OpenPose\openpose-1.7.0-binaries-win64-gpu-python3.7-flir-3d_recommended"', shell=True)
    
  • 通过cwd参数指定命令执行的工作目录
    利用subprocess.call()的cwd参数,直接设置PowerShell命令的执行根目录,这样相对路径就会基于这个目录解析:

    import subprocess
    # 设置工作目录到OneDrive\Desktop,再cd到目标子目录
    subprocess.call('powershell.exe cd OpenPose\openpose-1.7.0-binaries-win64-gpu-python3.7-flir-3d_recommended', 
                    shell=True, 
                    cwd=r'C:\Users\cubeow\OneDrive\Desktop')
    

    如果目标目录就是你要执行后续命令的目录,甚至可以直接跳过cd命令,直接用cwd指定目标路径:

    subprocess.call('powershell.exe .\your_target_script.ps1', 
                    shell=True, 
                    cwd=r'C:\Users\cubeow\OneDrive\Desktop\OpenPose\openpose-1.7.0-binaries-win64-gpu-python3.7-flir-3d_recommended')
    
  • 在同一个PowerShell会话中串联命令
    单独执行cd命令不会改变后续subprocess调用的工作目录,因为每个subprocess都是独立的进程。如果需要在目标目录下执行其他命令,要把cd和后续命令放在同一个PowerShell会话中,用分号分隔:

    subprocess.call(r'powershell.exe cd "C:\Users\cubeow\OneDrive\Desktop\OpenPose\openpose-1.7.0-binaries-win64-gpu-python3.7-flir-3d_recommended"; .\run_openpose.ps1', shell=True)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:01:22