python subprocess.popen重定向以创建文件

时间:2015-02-11 16:42:22

标签: python postgresql

我一直在寻找如何做到这一点而没有任何成功。我继承了一个python脚本,用于在我们的数据库上执行每小时备份。原始脚本太慢,所以我尝试更快的实用程序。如果键入shell,我的新命令将如下所示:

pg_basebackup -h 127.0.0.1 -F t -X f -c fast -z -D - --username=postgres > db.backup.tgz

问题是原始脚本使用call(cmd),如果上面是cmd字符串,则会失败。我一直在寻找如何修改它以使用popen,但找不到任何使用文件创建重定向的示例,如 >。如图所示的pg_basebackup将输出到stdout。我到目前为止成功的唯一方法是将-D -更改为-D some.file.tgz,然后将文件移至存档,但我宁愿一步完成。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

可能是这样的吗?

with open("db.backup.tgz","a") as stdout:
        p = subprocess.Popen(cmd_without_redirector, stdout=stdout, stderr=stdout, shell=True)
        p.wait()

答案 1 :(得分:0)

嗯...... pg_basebackup可执行文件必须能够附加到该文件。如果我以你建议的方式打开文件,我不知道python中的正确语法能够做到这一点。如果我尝试在字符串中使用“>”或“>>”来调用cmd(),python就可以了。这是我真正的问题,我没有找到任何指导。