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

Him*_*ere 9 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
Run Code Online (Sandbox Code Playgroud)

我试图在Windows上运行它,并用cat等效的windows 替换对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
Run Code Online (Sandbox Code Playgroud)

产生相同的错误.

但是,当我单独执行python脚本时,它按预期工作:

C:/python27/python path/to/py-script.py path/to/file-argument
Run Code Online (Sandbox Code Playgroud)

因此,我假设使用错误导致type将脚本的结果直接传递给psql.

有谁知道正确的语法?

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

sto*_*vfl 2

\n

评论:所以我可以\xc2\xb4t 将 sql 文件和 python 脚本的输出组合在一起并将它们通过管道传输到 psql?

\n
\n

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

\n
# Usage\npython import_gtfs_to_sql.py... | python myCat.py gtfs_tables.sql | psql mydbname\n\n#myCat.py\nimport sys\nwith open(sys.argv[1]) as fh:\n    sys.stdout.write(fh.read())\n\nsys.stdout.write(sys.stdin.read())\n
Run Code Online (Sandbox Code Playgroud)\n
\n

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

\n

TYPE命令不接受stdin

\n

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

\n

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

\n

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

\n
    \n
  1. 找出上面的错误来自于哪个部分。

    \n
     a) type gtfs_tables.sql\n b) type <(python ...   \n c) type gtfs_tables.sql <(python ...  \n d) type gtfs_tables.sql | psql mydbname\n e) type <(python ... | psql mydbname  \n
    Run Code Online (Sandbox Code Playgroud)\n
  2. \n
  3. 将输出保存<(python ... 到文件并尝试

    \n
     python ... > tmp_python_output\n type gtfs_tables.sql tmp_python_output | psql mydbname\n
    Run Code Online (Sandbox Code Playgroud)\n
  4. \n
\n