如何通过管道传输多个 sql- 和 py-scripts

How to pipe multiple sql- and py-scripts

我从 github gtfs_SQL_importer 复制了以下代码:

cat gtfs_tables.sql \
  <(python import_gtfs_to_sql.py path/to/gtfs/data/directory) \
  gtfs_tables_makeindexes.sql \
  vacuumer.sql \
  | psql mydbname

我在 windows 上尝试 运行 并用 windows 等效的 type 替换了对 UNIX 命令 cat 的调用,这应该可以工作类似于 is-there-replacement-for-cat-on-windows.

然而,当我执行该代码时,出现了一些错误:

The syntax for the filename, directory or filesystem is wrong.

所以我试图将管道文件的数量限制为仅组合对 python 的调用和对 psql:

的调用
type <(C:/python27/python path/to/py-script.py path/to/file-argument) | psql -U myUser -d myDatabase

这会导致相同的错误。

然而,当我单独执行 python-脚本时,它按预期工作:

C:/python27/python path/to/py-script.py path/to/file-argument

所以我假设使用 type 的错误结果是为了将脚本的结果直接传送到 psql

有人知道正确的语法吗?

编辑:为了确保问题与未找到的文件无关,我对命令中的所有参数使用了绝对路径,除了 typepsql-命令(它们都是通过 %PATH%-变量处理。

Comment: So I can´t combine the sql-files and the output from my pythonscript together and pipe them to psql?

另一种方法,使用 Python 创建您自己的 cat, 或将前三行代码添加到 import_gtfs_to_sql.py, 例如:

# Usage
python import_gtfs_to_sql.py... | python myCat.py gtfs_tables.sql | psql mydbname

#myCat.py
import sys
with open(sys.argv[1]) as fh:
    sys.stdout.write(fh.read())

sys.stdout.write(sys.stdin.read())

评论:我已经知道错误来自类型<(python...)

TYPE 命令不接受 stdin.

因此您唯一的解决方案是选项 2。

另一种方法是使用您的 Python 脚本来执行 print gtfs_tables.sql

问题: 文件名、目录或文件系统的语法错误.

  1. 找出上面的Error是从哪部分出来的

     a) type gtfs_tables.sql
     b) type <(python ...   
     c) type gtfs_tables.sql <(python ...  
     d) type gtfs_tables.sql | psql mydbname
     e) type <(python ... | psql mydbname  
    
  2. <(python ... 的输出保存到文件并尝试

     python ... > tmp_python_output
     type gtfs_tables.sql tmp_python_output | psql mydbname
    

安装 cygwin 并在 Windows 上使用 unix cat。