postgresdump是在eclipse中构建的,使用的语言是python

2024-04-27 23:12:20 发布

您现在位置:Python中文网/ 问答频道 /正文

请参考下面的python代码,并告诉我有什么错误或者需要做些什么才能使它工作。在

我面临的问题是,Eclipse被破坏了,备份文件是空的。在

import os
import subprocess

if __name__ == '__main__':
    print "test hello"

    localhost = 'localhost'
    port = '5432'
    role = 'serverdb_user'
    dump_dir = '/home/backupfile/'
    db_username = 'empserverdb_user'
    db_names = 'emp1'

    try:
        bkp_file = 'backup1'
        file_path = os.path.join(dump_dir, bkp_file)
        print file_path
        dumper_cmd = ['pg_dump', '-h', localhost, '-p', port, '-U', db_username, '--role', role, '-W', '-Fc', '-v', '-f', file_path, db_names]
        print dumper_cmd
        subprocess.check_output(dumper_cmd)
    except subprocess.CalledProcessError, ex:
        print("Couldn't back up database {0}: pg_dump returned {1} with output {2}".format(db_names, ex.returncode, ex.output))
    except Exception, ex:
        print("Couldn't backup database {0}: unexpected error {1}".format(db_names, ex))

谢谢。。。在


Tags: pathimportcmdlocalhostoutputdbnamesos
1条回答
网友
1楼 · 发布于 2024-04-27 23:12:20

首先,use proper exception handling。要么使用sys.exc_info获取异常上下文,要么使用在本地获取异常的异常捕获,如except Exception, ex:

此外,这里没有理由使用shell=True,而且有许多理由不使用。如果您所在的平台(如Windows)没有正确的exec系统调用,那么让subprocess模块处理shell转义。将参数数组传递给subprocess。这样做更容易,如果数据库名、文件路径、用户名或其他内容中有空格,程序仍然可以工作。在

最后,在较新的Python上使用subprocess.check_call,或者最好使用check_output。你没有检查通话结果,所以你不知道是否出了问题。check_output将进程stderr存储在CalledProcessExceptionoutput字段中,以便报告错误。在

否则,请使用check_call并使用subprocess模块的I/O重定向功能将pg_dump输出写入文件。然后在错误中报告该文件名,以便用户可以查看它。在

类似(未经测试):

    try:
        bkp_file = 'backup1'
        file_path = os.path.join(dump_dir, bkp_file)
        dumper_cmd = ['pg_dump', '-h', localhost, '-p', port, '-U', db_username, ' role', role, '-W', '-Fc', '-v', '-f', file_path, db_name]
        subprocess.check_output(dumper_cmd)
    except subprocess.CalledProcessError, ex:
        print("Couldn't back up database {0}: pg_dump returned {1} with output {2}".format(db_name, ex.returncode, ex.output)
    except Exception, ex:
        print("Couldn't backup database {0}: unexpected error {1}".format(db_name, ex))

相关问题 更多 >