作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
使用命令行,我确认以下命令正确执行
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/
我是一名优秀的程序员,十分优秀!