Newsgroup: it.comp.lang.perl
Titolo: System

Innanzitutto grazie a tutti x il precedente post!Sono riuscita a
realizzare i miei "primi" programmini..
Vi devo fare un'altra domanda, relativa all'operazione system.
Se inserisco "system(cls)", il programma mi pulisce lo schermo..
Se inserisco "system(<netstat -na>), il programma mi effettua il
netstat...
..ma come si fa ad inserire il risultato del netstat sul file.txt??
Ho scritto cosě, ma mi da errore di sintassi!!:
system(<netstat -na > c:\\$dir\\$sub>);
Grazie di nuovo! 
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ..ma come si fa ad inserire il risultato del netstat sul file.txt??
Un metodo puo` essere questo:
salvi tutte le righe dell'output in un'array e poi lavori sull'array
linea per linea, ad esempio:
 
	perl -e 'foreach (qx(netstat -na)) { print if /LISTEN/ }'
questo on-liner ti stampa a video solo le linee di netstat che hanno
la parola LISTEN dentro.
Questo metodo e` abbastanza sicuro perche' ti permette di verificare
e di lavorare sull'output prima di salvarlo nel file.
Un altro metodo puo` essere redirezionare l'output del programma, ma
non ho modo di controllare se funziona sui sistemi che non hanno una
bash. :-)
+++
Al momento mi e` venuto in mente un altro sistema, ma funziona solo,
e solo se, il tuo sistema supporta i pipe:
	open (NETSTAT, 'netstat -na|')
		or die "Impossibile aprire un pipe: $!";
	while (<NETSTAT>) { print STDOUT if /LISTEN/ }
	close (NETSTAT);
Anche questo e` comodo, perche' ti permette di lavorare sull'output,
prima di salvarlo.
Bye,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)           [ 
http://www.radiance.d2g.com/~zefram
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 system(<netstat -na > c:\\$dir\\$sub>);
In effetti cosi` da sicuramente errore di sintassi. ;-) Prova cosi`:
system("netstat -na > file.txt");
Chiaramente puoi anche mettere c:\\$dir\\$sub, insomma il path completo 
nel file in cui vuoi venga rediretto l'output.
Se invece ti interessa ottenere l'otuput del programma in una variabile, 
puoi usare:
$output = `netstat -na`;
	A presto, Michele.

Ciao Michele, ho provato a fare come mi hai scritto (ho provato anche
con altri comandi)
ma mi dice "comando o nome file non valido"!
Non capisco perchč?Se con il system posso effettuare operazioni che di
norma vengono effettuate dalla linea di comando del prompt del dos (come
cls, come il semplice netstat..), non capisco perchč non mi fa
effettuare la copia.
Il comando č: netstat -na > file.txt. Oppure qualsiasi altro comando!
Ho provato a mettere anche il risultato in una variabile ed in un array,
ma il risultato č nullo.
Anzi, alcune volte mi da l'output a video, ma non mi stampa nel file.
Altre volte mi stampa uno "0" nel file.
Altre volte mi dice "Readline()on unopened filehandle...".
Ah, dimenticavo.Una domanda che non centra niente con il problema
precedente:
ipotizziamo che abbia 2 "if" che mi atttiveranno due funzioni
differenti..come posso separare gli output su due finestre-dos??
(deve essere una procedura attivata dal programma, indipendentemente
dall'utente). 
Ciao ciao
baci
Dany


 	A presto, Michele.


 variabile.. ma il system non va!
Prova questa allora:
open (NETSTAT, ' netstat -na|');
open (OUT_FILE, ">c:\\dir\\file.txt");
while (<NETSTAT>) {
        print OUT_FILE;
}
close NETSTAT;
close OUT_FILE;
A meno di problemi di redirezioni di STDOUT su win32 dovrebbe 
funzionare.
-- 
Saluti,
Giancarlo

Ciao ragazzi, scusate se mi intrometto in questa discussione..ma ho
ritenuto inutile aprire un altro post su un discorso simile-
Sto cercando di realizzare un progr per l'uso del netcat; si possono
inviare mail con la stessa funzionalità del telnet ed il comando è:
nc $indirizzo 25 < mail.txt
seguendo le vostre indicazioni il comando non mi funziona!Ho provato
anch'io ad utilizzare la funzione system ma nache le pipe e l'exec!ma il
comando non invia nulla!
Sapreste aiutarmi?
Vi ringrazio anticipatamente.
Ciao
Michele


 dall'utente). 
Non penso di avere capito fino in fondo. ;) Cioe' vuoi che il programma, 
a seconda del risultato di un IF, apra una finestra DOS e ci scriva... 
qualcosa???
	Michele

 ho provato come mi hai suggerito...ma non  funziona!
Ahem, ribadisco che sotto Windows XP (e ActivePerl v5.6.1 build 631) 
funziona benissimo ad esempio questo:
system("netstat -na > file.txt");
;-)
	A presto, Michele.

qualcosa???
Ti faccio un esempio concreto. Ho realizzato un banale proggy x
effettuare il nestat:
"Scelta:
          1. comando a
          2. comando b
          3. comando c"
X il momento posso eseguire un comando alla volta. Mentre vorrei fare in
modo che se dgt 1 mi apra una finestrella a parte ed esegua il comando
"a" e così via; in modo tale che possa eseguire contemporaneamente (es.)
tutti e tre i comandi su tre distinte finestre.


 tutti e tre i comandi su tre distinte finestre.
Ok, ora ho capito. Non uso molto Windoze, e forse qualcuno ti indichera`
un metodo migliore. Puoi comunque utilizzare il comando "start" di
Windows, che causa l'apertura di una nuova finestra in cui viene eseguito
un determinato comando. Ad esempio puoi scrivere, da Perl:
system("start netstat -a");
...sempre che sotto il TUO WinME funzioni. ;-)
	A presto, Michele.
-- 
Michele Beltrame
http://www.italpro.net/mb/
ICQ# 76660101 - e-mail: 
m...@italpro.net

:-(( niente...niente..
Lo "strat" mi funziona:
system("start /r programma");
Ma il:
system("netstat -na > c:\\documenti\\vuoto.txt");
non funziona! (comando o nome file non valido)
Ho provato persino a scomporre il comando:
system("netstat -na");system(" > c:\\documenti\\vuoto.txt");
Mi esegue il nestat (output a video) e poi, mi compare la riga con:
comando o nome file non valido...
perciò il problema sta in  "> c:\\documenti\\vuoto.txt"!
Però xkè se lo scrivo dal prompt dos.. funziona?
Non mi funziona "solo" se lo inserisco nello script perl.


 file non valido...
Beh, spezzato in due non funziona sicuramente, poiche' cosi` esegui
due programmi distinti. Il perche' la prima sintassi, che e` quella
corretta, non funzioni, non saprei spiegartelo, poiche' come detto a me
non da` alcun problema ne' sotto Win98 ne' sotto WinXP. Di piu` non
saprei dirti, mi dispiace. :-(
L'unica cosa: se non hai una versione proprio recentissima di ActivePerl,
prova ad aggiornare all'ultima.


..:-))) .. Michele.. non ci crederai.. ma ce l'ho fatta!!ora mi
funziona!!
Finalmente!ci stavo sbattendo la testa da giorni!!
Vuoi sapere come ho fatto?? Non ho usato più system ma:
exec ("netstat -na > c:\\dir\\testo.txt");
Ma come mai?!xkè con il system non funziona e con l'exec si?!
(GRAZIE TANTE!!Grazie x la tua "infinita" disponibilità e... pazienza!)
Ciao
Dany


 (GRAZIE TANTE!!Grazie x la tua "infinita" disponibilità e... pazienza!)
Non farmi arrossire davanti a tutti i perlmen per favore. ;)


Ho controllato... ho ActivePerl 5.6.1 630-Msi win32-x86.msi!
sono stata sul sito :ActiveState ed ho letto che x chi ha Me deve avre
come requisito:
Windows Installer 2.0+ 
ho dato un'occhiata nel mio pc... ma non ce l'ho! non potrebbe esere
questo uno dei problemi che mi comporta errore nell'operazione system!
cmq, lo sto scaricando, non si sa mai!Staremo a vedere..
Non può essere che a tutti funziona ed a me no!e va bene che da quando
ho capito win fa schifo.. ma allora il mio fa + schifo degli altri! :-)
A presto!
Dany


 ho dato un'occhiata nel mio pc... ma non ce l'ho! non potrebbe esere
L'Installer e` richiesto solo per installare il Perl, come dice il nome.
;-)
Visto che ci sei, comunque, installa anche l'ultimissima versione di
ActivePerl, sai mai...
A presto, Michele.


"comando o nome file non valido"!
Ciao,
il WinMe se non ricordo male ha una strana gestione del Dos, ad ofni
modo potrebbe essere anche solo una questione di path, quando lanci
una finestra Dos, credo che si carichi un suo autoexec e un suo config
per cui trova il percorso di tutti i comandi di sistema.
Prova a lanciare la funzione system anteponendo il percorso assoluto
di netstat. esempio:
system("c:\windows\netstat.exe -na > file.txt"); 
Prova con e poi senza .exe
A presto
--
|Stefano Orsi
|Email: s punto orsi chiocciola ogcs punto com

 Prova con e poi senza .exe


Sono convinta che dipenda da WinMe!!ci deve essere qualcosa di diverso
Ciao,
comuqne quel messaggio secondo me' e' un messaggio tipico di MsDos e
non del interprete Perl.
Prova ad eseguire un altro comando Dos, tipo date, dir ecc. e vedi
cosa dice.


Ragazzi.. vi ringrazio di cuore!sono riuscita a far funzionare il
system.. avevo commesso un errore nell'instalazione!non è un problema di
winMe!
Finalmente.. :-))
Ciao ciao a presto
Dany
