繁体   English   中英

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

[英]Cannot redirect python script output to infile

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

#! /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))

如果我使用以下Linux命令,它将正常工作并打印出行的反向顺序

./myrev infile

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

./myrev infile > infile

执行上述命令后,infile变为空文件。

为什么我不能将输出重定向到原始文件,该如何解决?

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

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

在此,如果命令成功执行,则可以通过将原始文件替换为新文件的内容来完成工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM