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
相关产品推荐
相关产品推荐

