stdin和sys.argv在Python中有什么区别?

10 浏览
0 Comments

stdin和sys.argv在Python中有什么区别?

这个问题已经有答案了

什么是\"sys.argv[1]\"?(什么是sys.argv,它从哪里来?)

如何从stdin读取数据?

在一项编码挑战中,我在读取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()})

并且在脚本结尾处

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

使用sys.argv在要求从stdin读取的挑战中是错误的吗?有何区别?为了满足要求,我应该做些什么?

admin 更改状态以发布 2023年5月21日
0
0 Comments

它们不是相同的:

>>> import sys
>>> sys.argv == sys.stdin
False

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)

这个迭代所有列在 sys.argv[1:] 中的文件的行,
默认情况下,如果列表为空,则为sys.stdin。如果文件名是“-”,它还将被替换为sys.stdin。要指定另一个文件名列表,请将其作为第一个参数传递给input()。还允许使用单个文件名。

0