gpt4 book ai didi

linux - Python 子进程(shell=True),不适用于 postgres 命令

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:45:30 24 4
gpt4 key购买 nike

使用命令行,我确认以下命令正确执行

echo '\c mydatabase;\i db-reset.sql' | psql -U postgres -h localhost

但是,在 Python 中,我可以确认以下行绝对不执行任何操作,并返回状态代码 0。

import subprocess

code = subprocess.call(r"echo '\c mydatabase;\i db-reset.sql' | psql -U postgres -h localhost", shell=True)
assert code == 0 # This comes to true

本质上,为什么使用子进程调用的命令实际上没有做任何事情

最佳答案

它可以工作,但你需要更多的反斜杠。另外,我建议您不要在此处使用 shell=True

这就是你所做的,但没有外壳:

p = subprocess.Popen(['psql', '-U', 'postgres', '-h', 'localhost'], shell=False, stdin=subprocess.PIPE)
p.communicate(r"\c mydatabase;\i db-reset.sql")

关于linux - Python 子进程(shell=True),不适用于 postgres 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20888748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com