如何通过管道传输多个 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
。
有人知道正确的语法吗?
编辑:为了确保问题与未找到的文件无关,我对命令中的所有参数使用了绝对路径,除了 type
和 psql
-命令(它们都是通过 %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
。
问题: 文件名、目录或文件系统的语法错误.
找出上面的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
将 <(python ...
的输出保存到文件并尝试
python ... > tmp_python_output
type gtfs_tables.sql tmp_python_output | psql mydbname
安装 cygwin 并在 Windows 上使用 unix cat。
我从 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
。
有人知道正确的语法吗?
编辑:为了确保问题与未找到的文件无关,我对命令中的所有参数使用了绝对路径,除了 type
和 psql
-命令(它们都是通过 %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
。
问题: 文件名、目录或文件系统的语法错误.
找出上面的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
将
<(python ...
的输出保存到文件并尝试python ... > tmp_python_output type gtfs_tables.sql tmp_python_output | psql mydbname
安装 cygwin 并在 Windows 上使用 unix cat。