如何管道多个sql-和py-scripts

时间:2017-05-28 18:40:39

标签: python pipeline windows-shell

我从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上运行此操作,并将等同于cat的窗口替换为UNIX命令type的调用,该调用应与is-there-replacement-for-cat-on-windows类似。

然而,当我执行该代码时,我收到一些错误:

  

文件名,目录或文件系统的语法是错误的。

所以我试图将管道文件的数量限制为仅将对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% - 变量)。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

  

评论:所以我无法将sql-files和pythonscript的输出结合在一起并将它们传递给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())
  

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

TYPE命令不接受stdin 因此,唯一的解决方案是选项2。

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

  

问题 文件名,目录或文件系统的语法是

  1. 找出上述错误来自哪个部分。

    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