python中的stdin和sys.argv有什么区别?

Bar*_*Bar 2 python

我在编码挑战中停靠点,指定我需要从STDIN读取.这是我的输入法:

def __init__(self, input):
    self._dictionary = {}
    with open(input, 'r') as f:
        reader = csv.reader(f, delimiter='\t')
        for row in reader:
          if self._dictionary.__contains__(row[0]):
            self._dictionary[row[0]].append(row[1])
          else:
            self._dictionary.update({row[0]: row[1].split()})
Run Code Online (Sandbox Code Playgroud)

并在脚本的末尾

if __name__ == "__main__":
    script = Script(sys.argv[1])
    for line in script.output_method():
      print line
Run Code Online (Sandbox Code Playgroud)

在要求从标准输入读取的挑战中使用sys.argv是错误的吗?有什么不同?我应该怎样做才能满足要求?

mon*_*kut 5

他们是不一样的:

>>> import sys
>>> sys.argv == sys.stdin
False
Run Code Online (Sandbox Code Playgroud)

sys.argv中

  • 传递给Python脚本的命令行参数列表.

sys.stdin sys.stdout sys.stderr

  • 与解释器的标准输入,输出和错误流相对应的文件对象.stdin用于除脚本之外的所有解释器输入,但包括对input()和raw_input()的调用.

正如@Vivek Rai在评论中提到的那样,您可以使用sys.stdin.readlines()标准读取.此外,您可以使用fileinput,这似乎完全符合您的要求.

import fileinput
for line in fileinput.input():
    process(line)
Run Code Online (Sandbox Code Playgroud)

这将迭代sys.argv [1:]中列出的所有文件的行,如果列表为空,则默认为sys.stdin.如果文件名是' - ',它也会被sys.stdin替换.要指定备用文件名列表,请将其作为input()的第一个参数传递.也允许使用单个文件名.