簡體   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