我正在尝试使用subprocess命令在Python脚本中运行psql命令。
我使用Windows环境,而psql命令旨在还原位于远程Linux服务器上的数据库。
代码段就是这个:
import os, sys
import subprocess
subprocess.call('psql -h ip_remote_server -p port -U user-d database -n schema --file="C:\Docs\script.sql"')
这不起作用,控制台通知找不到指定的文件。
任何帮助将不胜感激!
谢谢!
答案 0 :(得分:1)
是的,您的问题绝对是您的出路。我经历了在Windows 10上安装Python的麻烦并创建了以下脚本:
example.bat
@echo off
echo This is a stand-in for your program
echo arg1 = %1
echo arg2 = %2
example.py
import subprocess
subprocess.call("C:\\Users\\bogus\\example.bat example arguments")
控制台
C:\Users\bogus>python example.py
This is a stand-in for your program
arg1 = example
arg2 = arguments
如您所见,您无需传递shell=True
或将命令拆分为一个列表。
如果您仔细查看subprocess.call
的文档,将会看到以下内容(强调):
上面显示的参数仅仅是一些常见的参数。 完整函数签名与Popen构造函数的签名相同-此函数将除超时以外的所有提供的参数直接传递给该接口。
如果您仔细查看subprocess.Popen
的文档,将会看到以下内容(强调):
在Windows上,如果args是序列,它将以Windows中将参数序列转换为字符串中所述的方式转换为字符串。这是因为底层的CreateProcess()对字符串进行操作。
关于将参数拆分为列表或传递shell=True
的任何建议仅适用于POSIX,只有一个例外:
在Windows上唯一需要指定shell = True的情况是将要执行的命令内置到shell中(例如dir或copy)。您不需要shell = True即可运行批处理文件或基于控制台的可执行文件。