Sto scrivendo uno script Python che deve scrivere alcuni dati in un file temporaneo, quindi creare un sottoprocesso che esegue un programma C++ che leggerà il file temporaneo. Sto cercando di utilizzare NamedTemporaryFile
per questo, ma secondo la documentazione,Come creare un file temporaneo che può essere letto da un sottoprocesso?
Se il nome può essere utilizzato per aprire il file una seconda volta, mentre il file temporaneo denominato è ancora aperto, varia tra le piattaforme (che può essere usato su Unix, ma non su Windows NT o successivi).
E in effetti, in Windows se scarico il file temporaneo dopo la scrittura, ma non lo chiudo finché non lo voglio, il sottoprocesso non è in grado di aprirlo per la lettura.
sto lavorando intorno a questo creando il file con delete=False
, chiudendola prima di deposizione delle uova il sottoprocesso, e quindi manualmente l'eliminazione di una volta ho finito:
fileTemp = tempfile.NamedTemporaryFile(delete = False)
try:
fileTemp.write(someStuff)
fileTemp.close()
# ...run the subprocess and wait for it to complete...
finally:
os.remove(fileTemp.name)
Questo sembra poco elegante. C'è un modo migliore per farlo? Forse un modo per aprire le autorizzazioni sul file temporaneo in modo che il sottoprocesso possa arrivare a questo?
Avete considerato la possibilità di convogliare i processi come una possibilità? –
@JonClements Sì, anche le piping sono possibili, ma richiederebbe una modifica all'interfaccia del sottoprocesso, che spero di evitare. –
Correlati: Problema Python 14243 - [tempfile.NamedTemporaryFile non particolarmente utile su Windows] (http://bugs.python.org/issue14243) –