无法在我的脚本中通过subprocess.call正确使用“psql”命令行

时间:2015-06-04 22:38:55

标签: python subprocess

我正在尝试在python中运行这样的命令:

subprocess.call(['psql', '--username=openerp', '--dbname=sf_template', '--no-password', '--command="select pg_terminate_backend(procpid) from pg_stat_activity where datname = \'sf_template\' and procpid <> pg_backend_pid()"'], env={'PGPASSWORD': 'mypassword'})

我得到以下详细输出:

psql: FATAL:  password authentication failed for user "<myCurrentOSuser>"

但是如果我通过shell运行这个命令:

PGPASSWORD=mypassword
psql --username=openerp --dbname=sf_template --no-password --command="select pg_terminate_backend(procpid) from pg_stat_activity where datname = 'sf_template' and procpid <> pg_backend_pid()"

它运作正常。

为什么?我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

(感谢前三位评论者 - 我在你的帮助下解决了这个问题。)

我将整个参数发送到subprocess.call作为一个单独的字符串(不完全理解数组语法)。

subprocess.call(['psql --username=openerp --dbname=sf_template --no-password --command="select pg_terminate_backend(procpid) from pg_stat_activity where datname = \'sf_template\' and procpid <> pg_backend_pid()"'], env={'PGPASSWORD': 'mypassword'})