繁体   English   中英

f2 = sys.argv [1] IndexError:尝试从bash文件获取参数时,列表索引超出范围

[英]f2=sys.argv[1] IndexError: list index out of range while trying to get argument from bash file

我正在尝试一个小项目,不幸的是,使用bash文件和python读取简单的csv文件

argv [1]的列表索引超出范围错误

main.py

import sys
import csv
def main(file_name):

    fp = open(file_name)
    reader = csv.reader(fp)
    points = []
    for row in reader:
        x = row[0]        
        y = row[1]
        print(y)

if __name__ == "__main__":
   if len(sys.argv) > 0:
       file_name = sys.argv[1]
       main(file_name)
   else:
       print "<filename> must be the first argument"

#BAsh文件

#!/usr/bin/env bash
chmod +x ./main.py
for f in ./sample_data/*.csv  

do
printf "%-28s" $f
./main.py $f
done

如果$f包含BASH可以解释的“多余”字符,例如&|| ,可能会发生这种情况。 无论如何,最好使用./main.py "$f"因此$f被解释为单个参数。

考虑这个例子

f="echo hello"
echo $f

产生: echo hello但不是hello因为$f被解释为参数。

也许您的python文件必须以#!/usr/bin/python开头#!/usr/bin/python它还会引发错误NameError: name 'reader' is not defined因为您的for循环不在主函数内。 将其移至主要功能内部后,您的代码即可工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM