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