从stdin python中读取

时间:2015-04-27 06:27:56

标签: python command-line command-line-arguments stdin

我正在尝试从第一个命令行参数中获取文件名输入,如果没有,则从stdin读取但由于某种原因,我的if语句似乎不起作用。我把它贴在下面。任何帮助将不胜感激。

import sys


filename=sys.argv[1]

if filename==None:
   filename=sys.stdin.readlines()

3 个答案:

答案 0 :(得分:2)

在尝试索引之前,您应该检查sys.argv的长度:

import sys
if len(sys.argv) > 1:
  filename=sys.argv[1]
else:
  filename=sys.stdin.readline().strip()

sys.argv中的第一个元素始终是python脚本的文件名,因此是> 1

<强> [编辑]

要扩展fixxxer关于is vs ==的答案:

如果比较的变量指向同一个对象,则

is返回True。这适用于None,因为None是单身人士。另一方面,==如果比较的变量相等则返回True,即它们可以指向两个不同(但相等)的对象,==将产生True。< / p>

答案 1 :(得分:0)

两件事:

  1. 与EventLisle一样,在继续之前检查sys.argv的大小。
  2. 检查变量是否为None的正确方法是:

    变量为无:

  3. 您的代码可以这样构建:

    import sys
    
    if len(sys.argv[1]):
        filename=sys.argv[1]
        # do your thing
    else:
        print "list is empty"
    

答案 2 :(得分:0)

我想知道根据你的代码,流程永远不会到达if块,它会在行filename=sys.argv[1]中抛出一个IndexError异常,所以你可以试试下面的代码

import sys

try:
   filename=sys.argv[1]
except IndexError: 
   filename=sys.stdin.readlines()