从 Stdin Python 中读取



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

import sys

filename=sys.argv[1]
if filename==None:
   filename=sys.stdin.readlines()

在尝试索引之前,您应该检查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==的答案:

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

我想知道根据您的代码,该流程永远不会到达if块,并且它会在第filename=sys.argv[1]行中抛出IndexError异常,所以也许您可以尝试以下代码

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

两件事:

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

    变量为"无":

您的代码结构可以如下所示:

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

最新更新