为什么将脚本的输出重定向到给出错误输出的文件?

时间:2019-01-27 21:03:21

标签: python shell redirect

这是python脚本sum_columns.py

#!/usr/bin/env python2.7

import sys

num_nodes = 0
num_edges = 0

for line in sys.stdin:
   line = line.strip()
   col_1, col_2 = line.split(',', 1)

   col_1 = int(col_1)
   col_2 = int(col_2)

   num_nodes += col_1
   num_edges += col_2

print '%s, %s' % (num_nodes, num_edges)

有一个名为outputs.dat的文件,其中有1行:

10, 10

我试图将python脚本的输出重定向到输入文件outputs.dat中,但是当我这样做时,当我期望0, 0时它会写出10, 10。当我重定向到另一个未命名为outputs.dat的文件时,我得到10, 10。为什么会这样呢?

这是我正在执行的命令。

[local_serv]$ cat outputs.dat
10, 10
[local_serv]$ cat outputs.dat | ./sum_columns.py 
10, 10
[local_serv]$ cat outputs.dat | ./sum_columns.py > test.dat; cat test.dat
10, 10
[local_serv]$ cat outputs.dat | ./sum_columns.py > outputs.dat; cat outputs.dat
0, 0
[local_serv]$ 

我的理解是>重写了outputs.dat(如果已经存在),为什么当python脚本打印0, 0时它又将其重写为10, 10

1 个答案:

答案 0 :(得分:1)

  

我的理解是>重写了outputs.dat(如果已经存在)

是的,它会截断文件。

  

为什么当python脚本打印0, 0时将其重写为10, 10

它不会打印出来。 Python脚本读取文件的内容以根据其内容执行一些计算,但是> 截断,因此当Python读取其内容时,它会是空的。