我正在尝试通过cat命令从文件获取输入到python文件。我的python版本是3.5。代码看起来像这样。
with open(sys.argv[1]) as f:
while True:
if f.readline()== '':
break
line = f.readline().strip()
我正在通过以下命令获取输入。
python cptest.py | cat ts.csv
但是我一直遇到以下错误。
文件“ cptest.py”,第9行,在 使用open(sys.argv [1])为f: IndexError:列表索引超出范围
如何使用cat命令将输入从文件发送到python脚本?我必须使用cat命令或任何其他将输入管道传输到文件的方式。
答案 0 :(得分:1)
似乎是您的命令在这里出现的问题。您正在将python脚本的输出传递给cat,还使用cat打开文件,这意味着cat将忽略您传递给它的任何内容。您应该将cat的输出通过管道传递到脚本中: {
"_index": "2019.01.28-container.api",
"_type": "doc",
"_id": "pZctlWgBojxJzDZGWqZz",
"_score": 1,
"_source": {
"type": "beats",
"level": "Debug",
"@timestamp": "2019-01-28T15:56:41.295Z",
"msg": "Hosting starting",
"logtime": "2019-01-28 15:23:12.911 +03:00",
"message": "2019-01-28 15:23:12.911 +03:00 Debug Hosting starting [exception 2]",
"exception": "exception 2"
}
}
然后,为了从python中的标准输入(从管道)读取输入,您应该这样做:cat ts.csv | python cptest.py
。
我很乐意建议您选择将文件名作为参数提供给python脚本的替代方法,例如:for line in sys.stdin
,然后打开此文件(您可以在python的sys.argv [1]中找到此名称(而不是cat )并逐行循环浏览。
祝你好运, Teo