/ / Impossibile reindirizzare l'output dello script Python su infile - python, linux

Impossibile reindirizzare l'output dello script python su infile - python, linux

Sto lavorando su Debian Stable Linux, che altrimenti funziona molto bene. Ho il seguente codice in un file di script python denominato "myrev" che funziona per invertire l'ordine delle righe di un determinato file di testo:

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

Funziona correttamente e stampa l'ordine inverso delle righe se utilizzo il seguente comando di Linux

./myrev infile

Tuttavia, se provo a reindirizzare l'output con il seguente comando nel file originale, viene generato un file vuoto:

./myrev infile > infile

Dopo il comando precedente, infile diventa un file vuoto.

Perché non posso reindirizzare l'output al file originale e come può essere risolto?

risposte:

0 per risposta № 1

utilizzando > apre il file di destinazione per scrivere, come se fosse aperto tramite fopen con la modalità "w". Quello subito tronca il file, prima che il programma venga avviato (succede mentre la shell sta configurando l'ambiente in precedenza execil tuo programma). Non puoi usare questo approccio per leggere da un file e sostituirlo come un unico passaggio. Il meglio che potresti fare sarebbe qualcosa di simile:

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

dove, se il comando ha esito positivo, si completa il lavoro sostituendo il file originale con il contenuto del nuovo file.