我想通过psql --username=fred myDB < //10.0.0.1/share/dump.sql.pgdump
执行命令subprocess.Popen
,以便我可以解析输出。但是,这样做时会出现以下错误:
>>> psql: warning: extra command-line argument "<" ignored
>>> psql: warning: extra command-line argument "//10.0.0.1/share/dump.sql.pgdump" ignored
我似乎没有正确格式化命令,但我不明白为什么。这就是我到目前为止所做的:
PASS = 'mypassword'
os.putenv('PGPASSWORD', PASS)
latest_dump = '//10.0.0.1/share/dump.sql.pgdump'
cmd = ['psql', '--username=fred', 'myDB', '<', latest_dump]
p = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
# Print each line
for line in iter(p.stdout.readline, b''):
sys.stdout.flush()
print(">>> " + line.rstrip())
答案 0 :(得分:1)
<
重定向器的使用是shell的功能。如果您的值是安全的(意味着它们不受不受信任的用户控制),您可以使用shell=True
关键字参数:
cmd = 'psql --username=fred myDB < %s' % latest_dump
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
更好的方法是:
cmd = ['psql', '--username=fred', 'myDB']
p = subprocess.Popen(cmd, stdin=open(latest_dump),
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
当然,您可能希望使用with open(latest_dump) as ...:
块来打开文件。