PDA

Visualizza la versione completa : [C/C++]: Eseguire comandi Linux e leggere l'output


van4dium
30-08-2006, 02:02
Su linux è possibile , tramite un programma(c++), eseguire comandi shell e ottenere il risultato che ,normalmente sarebbe stampato a video (standard output), come stringa?

(come fa python importando il modulo 'commands')
grazie...

:ciauz:

Gnix
30-08-2006, 15:30
non ho capito esattamente cosa intendi, ma con system("ls"); dovresti aver quel che vuoi.

Gnix

van4dium
31-08-2006, 07:25
grazie mille
in pratica era quello che volevo,

ma come faccio ,x esempio, ad avere lo standard output su un textedit?

grazie ancora :ciauz:

XWolverineX
31-08-2006, 08:45
Originariamente inviato da van4dium
grazie mille
in pratica era quello che volevo,

ma come faccio ,x esempio, ad avere lo standard output su un textedit?

grazie ancora :ciauz:

Intendi...scrivere su un file?

van4dium
01-09-2006, 02:22
No , non devo scriverlo in un file ma ottenere il risultato come variabile (possibilmente stringa),

io ,ad esempio, con python per ottenere l'output di un comando shell (Linux), faccio uno script così:


import commands

shellout = commands.getoutput('ls')

/-----------------------------------------------\

Nella variabile 'shellout' è contenuto l'output di 'ls' , ovvero la lista dei file della cartella corrente
restituita come stringa ,da poter scrivere dove si vuole.

In c++ è possibile (sicuramente) fare ciò?

:ciauz:

van4dium
04-09-2006, 18:03
X inviare il comando alla shell (sistema) ho trovato la funzione:

system("comando");

Ma come faccio a settare una variabile con l'output che normalmente viene scritto sulla console?

Grazie :ciauz: .

XWolverineX
04-09-2006, 18:10
http://msdn2.microsoft.com/en-us/library/277bwbdz.aspx

è tutto ciò che può fare system

zero85
04-09-2006, 18:23
Come da reference l'unico valore ritornato da system() è un int che identifica se il comando è stato eseguito con successo o se si sono verificati errori. Una soluzione è reindirizzare l'output del comando in questo modo system("ls -la >> list.txt"); e poi leggere il contenuto del file.
Altra soluzione potrebbe consistere nell'utilizzo della funzione popen() (http://www.lilik.it/~mirko/gapil/gapilsu182.html).

NB la funzione popen non è ANSI c!!!

billiejoex
05-09-2006, 22:51
C:\Python24>python.exe
Python 2.4.2 (#67, Sep 28 2005, 12:41:11) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import popen2
>>> cmd = popen2.popen4('dir C:\\')
>>> print cmd[0].read()
Il volume nell'unità C è Windows
Numero di serie del volume: F0E0-8B27

Directory di C:\

13/05/2006 18.49 <DIR> .idlerc
03/11/2005 16.19 0 AUTOEXEC.BAT
15/12/2005 09.00 11.966.065 AVG7QT.DAT
03/11/2005 16.19 0 CONFIG.SYS
03/12/2005 18.41 <DIR> Documents and Settings
03/11/2005 16.26 <DIR> mgafold
27/11/2005 20.41 <DIR> nmap
03/11/2005 16.20 <DIR> Program Files
29/06/2006 10.19 <DIR> Programmi
02/06/2006 18.11 <DIR> Python24
24/07/2006 09.44 <DIR> WINDOWS
3 File 11.966.065 byte
8 Directory 6.492.270.592 byte disponibili

XWolverineX
06-09-2006, 12:40
Originariamente inviato da billiejoex

C:\Python24>python.exe
Python 2.4.2 (#67, Sep 28 2005, 12:41:11) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import popen2
>>> cmd = popen2.popen4('dir C:\\')
>>> print cmd[0].read()
Il volume nell'unità C è Windows
Numero di serie del volume: F0E0-8B27

Directory di C:\

13/05/2006 18.49 <DIR> .idlerc
03/11/2005 16.19 0 AUTOEXEC.BAT
15/12/2005 09.00 11.966.065 AVG7QT.DAT
03/11/2005 16.19 0 CONFIG.SYS
03/12/2005 18.41 <DIR> Documents and Settings
03/11/2005 16.26 <DIR> mgafold
27/11/2005 20.41 <DIR> nmap
03/11/2005 16.20 <DIR> Program Files
29/06/2006 10.19 <DIR> Programmi
02/06/2006 18.11 <DIR> Python24
24/07/2006 09.44 <DIR> WINDOWS
3 File 11.966.065 byte
8 Directory 6.492.270.592 byte disponibili


se non lo hai capito a lui serve in c++

Loading