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

如何通过Python脚本带参数运行psql.exe?

问题解决:Python调用psql未正确传入重定向参数

问题原因

你遇到的问题核心是subprocess默认不解析shell的重定向语法:

  • 用元组传参时,< {file}会被psql当成普通命令行参数,而非shell的输入重定向指令,psql无法识别该参数,因此进入交互模式等待用户输入。
  • 直接用字符串调用但未加shell=True时,Windows平台下subprocess不会启动cmd解析重定向语法,同样无法生效。

两种解决方案

方案1:启用Shell解析(与cmd命令写法一致)

将完整命令作为字符串传递,并开启shell=True,让系统shell处理重定向逻辑:

def main():
    # 给路径加双引号,避免路径含空格时出现解析错误
    full_command = f'"{commandlet}" "{con_str}" < "{file}"'
    subprocess.check_call(full_command, shell=True)

方案2:通过stdin传递文件(更安全推荐)

不依赖shell重定向,直接将备份文件作为psql的标准输入传递,这种方式无shell注入风险,跨平台性更好:

def main():
    with open(file, 'r', encoding='utf-8') as backup_file:
        subprocess.check_call([commandlet, con_str], stdin=backup_file)

验证

两种方法都能让psql正确读取备份文件并执行导入操作,不会再进入交互等待状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:02:31