[英]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.