Chciałbym utworzyć plik tymczasowy, napisać do uchwytu pliku, a następnie wywołać program zewnętrzny z nazwą pliku.
Problem polega na tym, że normalnie chciałbym close
plik po zapisaniu do niego i przed wywołaniem zewnętrznego programu, ale jeśli dobrze rozumiem close
-ing a tempfile()
powoduje usunięcie go.
Jakie jest więc rozwiązanie?
Odpowiedzi:
7 dla odpowiedzi № 1Napisz do pliku tymczasowego z wyłączonym buforowaniem. Wywołaj program zewnętrzny przed zamknięciem pliku w skrypcie Perla, a zewnętrzny program będzie mógł odczytać wszystko, co napisałeś.
use File::Temp qw(tempfile);
use IO::Handle;
my ($fh, $filename) = tempfile( $template, ... );
... make some writes to $fh ...
# flush but don"t close $fh before launching external command
$fh->flush;
system("/path/to/the/externalCommand --input $filename");
close $fh;
# file is erased when $fh goes out of scope
5 dla odpowiedzi nr 2
Od http://perldoc.perl.org/File/Temp.html:
unlink_on_destroy
Control whether the file is unlinked when the object goes out of scope. The file is removed if this value is true and $KEEP_ALL is not.
1. $fh->unlink_on_destroy( 1 );
Default is for the file to be removed.
Spróbuj to ustawić 0
.
0 dla odpowiedzi № 3
z interfejsem OOP File::Temp
możesz to zrobić:
my $cpp = File::Temp->new;
print $cpp "SOME TEXT";
$cpp->flush;
`cat $cpp`;