Python脚本调用PowerShell执行Set-Location等命令不生效如何修复?
问题修复方案
原代码运行效果如下:
问题根因
- 原有代码存在两个核心错误:
subprocess.Popen会启动独立的新PowerShell进程,该进程修改的工作目录仅作用于自身,执行结束后就会销毁,完全不会影响手动打开的交互式PowerShell窗口- 命令字符串的引号拼接错误,导致PowerShell收到指令后没有解析为可执行命令,仅做普通字符串输出,所以没有高亮也不会触发执行
场景1:仅需要Python后续操作/子进程使用新工作目录
直接用Python原生接口修改当前进程的工作目录即可,无需调用PowerShell,效率最高:
import os # 直接切换当前Python进程的工作目录,后续所有子进程默认继承该目录 os.chdir(r"C:\Users\MyName\Desktop\new_folder")
场景2:需要打开新的PowerShell窗口且自动切换到目标目录
调整PowerShell启动参数,避免转义错误,同时加-NoExit参数让窗口执行完命令后不关闭:
import subprocess target_path = r"C:\Users\MyName\Desktop\new_folder" command = f"Set-Location {target_path}" # 用列表传参避免引号转义问题,-NoExit让PowerShell执行完命令保持运行 subprocess.Popen(["powershell", "-NoExit", "-Command", command], shell=True)
运行上述代码后会弹出新的PowerShell窗口,默认已经处于new_folder目录下。
场景3:需要给当前已打开的交互式PowerShell窗口发送执行命令
如果你的需求是操控已经打开的PowerShell窗口执行命令,可以用模拟键盘输入的方案实现:
- 先安装依赖:
pip install pyautogui - 代码示例:
import pyautogui import time # 留3秒时间手动切换到目标PowerShell窗口,设为活动窗口 time.sleep(3) # 输入命令+回车,自动触发执行 pyautogui.typewrite(r"Set-Location C:\Users\MyName\Desktop\new_folder" + "\n")
内容的提问来源于stack exchange,提问作者Sihwan Lee
相关产品推荐
相关产品推荐

