Python:如何将文件内容附加到格式字符串?

时间:2014-10-21 21:55:22

标签: python string-formatting

我试图在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 ")")

1 个答案:

答案 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直接调用程序,而且每个参数都是直接传入的。无需进一步引用。