我试图在Python脚本中插入多行SQL文件的文件内容:
sql_file = open(sql_file_path, 'r')
file_content = sql_file.read()
file_content = file_content.replace("placeholder", "realvalue")
import_cmd = 'ogr2ogr -f "PostgreSQL" \
-lco GEOMETRY_NAME=the_geom \
PG:"host=localhost user={db_user_name} port=5432 \
dbname={db_name} password={db_password}" \
{source_file} -nln "{db_table_name}" \
-sql "$(cat {file_content})"'
os.system(import_cmd.format(
db_user_name=db_user_name,
db_name=db_name,
db_password=db_password,
source_file=source_file,
db_table_name=db_table_name,
file_content=file_content
))
文件sql_file_path
包含多行。内容通过replace
进行修改。然后,必须将新file_content
附加到-sql
命令行工具的ogr2ogr
参数。但是,脚本会抛出此错误:
Syntax error: "(" unexpected (expecting ")")
答案 0 :(得分:1)
请勿使用os.system
。使用subprocess.call()
并将您的参数作为列表传递:
import subprocess
conn_info = (
'PG:host=localhost user={db_user_name} port=5432 '
'dbname={db_name} password={db_password}'.format(
db_user_name=db_user_name,
db_name=db_name,
db_password=db_password))
subprocess.call([
'ogr2ogr', '-f', 'PostgreSQL', '-lco', 'GEOMETRY_NAME=the_geom',
conn_info, source_file, '-nln', db_table_name, '-sql', file_content])
这不会通过shell直接调用程序,而且每个参数都是直接传入的。无需进一步引用。