我从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
。
有谁知道正确的语法?
编辑:为了确保问题与未找到的文件无关,我在命令中的所有参数都使用了绝对路径,除了type
和psql
- 命令(都是通过%PATH%
- 变量)。
答案 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
。
问题: 文件名,目录或文件系统的语法是 。
找出上述错误来自哪个部分。
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