无法将python脚本输出重定向到infile

时间:2018-01-03 02:04:30

标签: python linux

我正在研究Debian Stable Linux,否则它运行得非常好。我在名为“myrev”的python脚本文件中有以下代码,它可以反转给定文本文件行的顺序:

require(data.table)
require(ggplot2)
wf <- data.table::fread('Date Gals Days  GpD    GpM
                     2016-10-21  6.0    1  6.0  186.0
                     2016-10-22  6.0    1  6.0  186.0
                     2016-10-23 12.4    1 12.4  384.4
                     2016-10-24 26.8    1 26.8  830.8
                     2016-10-25 33.3    1 33.3 1032.3
                     2016-10-26 28.3    1 28.3  877.3')
nmu <- mean(wf$Gals)
textmu <- paste("Mean:", round(nmu, 2))
nmed <- median(wf$Gals)
textmed <- paste("Median:", round(nmed, 2))

p <- ggplot(wf, aes(Date, Gals)) +  
     geom_line(aes(lty = "Gals", color = "Gals", group = 1)) +
     geom_hline(aes(yintercept = nmu,  linetype = textmu, color = textmu), 
                color='red',size=1)+
     geom_hline(aes(yintercept = nmed, linetype = textmed, color = textmed), 
                color='orange',size=1)+
     #scale_linetype('Water Usage') +
     scale_color_manual('Water Usage', 
                        values=c('Gals'='black',textmu='red', textmed='orange')) +
     xlab("") + 
     ylab("Gallons per Day")

print(p)

如果我使用以下Linux命令

,它可以正常工作并打印出相反的行顺序
#! /usr/bin/python3 

import sys

if len(sys.argv) < 2: 
    print("Usage: myrev infile")
    sys.exit()
try:
    with open(sys.argv[1], "r") as f:
        lines = f.read().split("\n")
except: 
    print("Unable to read infile.")
    sys.exit()

lines.reverse()
print("\n".join(lines))

但是,如果我尝试使用以下命令将输出重定向到原始文件,则会生成一个空白文件:

./myrev infile

在上面的命令之后,infile变成一个空文件。

为什么我不能将输出重定向到原始文件以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

使用>打开要写入的目标文件,就像通过fopen以模式"w"打开一样。在程序甚至启动之前,立即会截断文件(当shell在exec程序之前配置环境时会发生这种情况)。您无法使用此方法从文件中读取数据并将其替换为单个步骤。你能做的最好的事情就是:

./myrev infile > infile.tmp && mv -f infile.tmp infile

其中,如果命令成功,则通过将原始文件替换为新文件的内容来完成工作。