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

Python脚本调用PowerShell执行Set-Location等命令不生效如何修复?

问题修复方案

原代码运行效果如下:
效果示例图

问题根因

  • 原有代码存在两个核心错误:
    1. subprocess.Popen会启动独立的新PowerShell进程,该进程修改的工作目录仅作用于自身,执行结束后就会销毁,完全不会影响手动打开的交互式PowerShell窗口
    2. 命令字符串的引号拼接错误,导致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窗口执行命令,可以用模拟键盘输入的方案实现:

  1. 先安装依赖:pip install pyautogui
  2. 代码示例:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:21:02