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

Python使用os.system调用PowerShell时引号转义报错问题

问题解决:Python调用PowerShell命令引号转义报错

报错原因

你编写的f-string存在引号嵌套冲突:外层f-string使用双引号包裹,内层PowerShell命令的参数也使用了双引号,Python解析代码时会误判字符串的结束位置,直接触发语法错误。

解决方案

方案1:调整引号嵌套规则(快速修复)

调整内层外层引号的类型,避免相同引号直接嵌套,也可以配合转义符使用,修改后的代码如下:

def Message():
    # 外层f-string用单引号,内层命令用双引号,变量包裹的单引号添加转义符
    os.system(f'powershell -c "Invoke-WebRequest -Uri \'{url.get()}\' -OutFile \'{filename.get()}\'"')

如果怕转义符写错,可以直接用三重引号包裹f-string,不需要额外转义:

def Message():
    os.system(f'''powershell -c "Invoke-WebRequest -Uri '{url.get()}' -OutFile '{filename.get()}'"''')

方案2:使用subprocess模块(更安全稳定)

os.system对特殊字符的处理能力较差,推荐改用Python标准库的subprocess模块,自动处理参数转义,还可以避免命令注入风险:
首先在文件头部添加导入:

import subprocess

修改Message函数:

def Message():
    # 对输入内容的单引号做转义,避免PowerShell解析错误
    safe_url = url.get().replace("'", "''")
    safe_filename = filename.get().replace("'", "''")
    cmd = ["powershell", "-c", f"Invoke-WebRequest -Uri '{safe_url}' -OutFile '{safe_filename}'"]
    subprocess.run(cmd, shell=True)

额外优化提示

你原有代码里两个输入框的标签坐标重叠,可以修改filetxt的y坐标避免重叠:

filetxt = Label(window, text = "Save File name").place(x = 10, y = 50)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:54:03