subprocess.popen 和 psql
问题:subprocess.popen 和 psql 我有需要调用 psql 的 Django 应用程序。我在一个 celery 线程中执行此操作,如下所示: @task() def insert_sqldump_threaded(username, database, file): host = database.server.db_address work = subprocess.Popen
·
问题:subprocess.popen 和 psql
我有需要调用 psql 的 Django 应用程序。我在一个 celery 线程中执行此操作,如下所示:
@task()
def insert_sqldump_threaded(username, database, file):
host = database.server.db_address
work = subprocess.Popen([settings.PSQL,
"-f%s" % file,
"-d%s" % database.db_name,
"-h%s" % host,
"-U%s" % settings.DB_ADMIN_USER
], env = {'PGPASSFILE': settings.DB_PASSFILE}
)
work.wait()
return work.returncode
在我的开发服务器上,PGPASSFILE 如下所示:
localhost:5432:*:postgres:postgres
这应该没问题。
问题是当这个函数被调用时我得到的只是来自 psql 的错误:
psql: could not translate host name "localhost" to address: Unknown server error
现在它变得非常奇怪,但是当我不提交“env”变量时,psql 似乎可以识别主机。至少它会要求输入密码。
关于如何解决这个问题的任何想法?
解答
我认为 postgresql 需要在传递env
时清除的其他环境变量。您可以简单地更改 os.environ 或预先复制它,如以下代码所示:
import os
@task()
def insert_sqldump_threaded(username, database, file):
d = dict(os.environ)
d['PGPASSFILE'] = settings.DB_PASSFILE
host = database.server.db_address
work = subprocess.Popen([settings.PSQL,
"-f%s" % file,
"-d%s" % database.db_name,
"-h%s" % host,
"-U%s" % settings.DB_ADMIN_USER
], env = d
)
work.wait()
return work.returncode
更多推荐
已为社区贡献19912条内容
所有评论(0)