[Risolto] Pascal: far eseguire comandi bash.

Ave … dopo un casino di anni (hmmm almeno 25) mi è venuto lo “sghiribizzo” di giocare un po’ col Pascal (sinceramente usai il turbo su Olivetti M24 alle superiori e UCSD Pascal per apple ]).

La mia domanda è semplice ovvero:

E’ possibile lanciando un programma binario compilato con sorgenti in Pascal far eseguire comandi “bash” ?
Se no … allora chiedo: forse è possibile con python ?
In caso affermativo invece … vi chiedo che sintassi usare.

Faccio un esempio molto banalissimo (da asilo…);
(Ah premetto che non uso Lazarus ma scrivo con nano e compilo con fpc) …

Dunque il mio “Program Spegni” (tanto per far un minuscolo esempio) vorrebbe una volta avviato far eseguire in bash il comando “shutdown -hP HH:MM &” quindi il comando “disown shutdown”.

Program Spegni;
        VAR ore,minuti:string[2];
        comando:string;
Begin
        write('Inserisci ora: ');
        readln(ore);
        write('Inserisci minuti: ');
        readln(minuti);
        comando:='shutdown -hP '+ore+':'+minuti+'&';
        writeln(comando);
        writeln('disown shutdown');
end.

Chiaramente, le ultime 2 istruzioni mi son servite solo per vedere se l’output era corretto o meno. Ma ciò che mi interessa è, al posto del “writeln” , far in modo che vi sia per esempio un “exec”.
Perdonate la mia ignoranza … spero non essermi spiegato male. (abbiate pazienza … sono obsoleto ed arrugginito :smiley: domani vado a comprare3 il “flessibile” :D)

Ciao :slight_smile:

Ciao

Ah PASCAL, è stato il mio primo amore, ci feci un megaimpianto robotizzato sul finire degli anni 80.

Che compilatore usi FreePASCAL o GNU Pascal?

Per FreePascal il comando è http://wiki.freepascal.org/Executing_External_Programs

Ciao Ciao, Moreno

Non per fare il solito rompi scatole, ma una ricerca su google? http://wiki.freepascal.org/Executing_External_Programs

@lablinux … non sei mica un rompiscatole … al contrario; Il problema è che non essendo io esperto, già questo post mi risulta di difficile comprensione) Cercavo un aiuto in italiano … tutto qui :slight_smile:

@Moreno … Grazie 1000 di esssere intervenuto :slight_smile:

Comunque … non riesco ancora a capire come dovrei modificare il programmino sopracitato.
Sto facendo qualche tentativo; serve dichiarare in USES “qualcosa in particolare” ?

Scusate mia ignoranza :expressionless:

Ok … ho trovato una soluzione forse solo “temporanea” aggiungendo la USES “unix”.

Inserisci ora: 07
Inserisci minuti: 42
Il sistema verrà arrestato alle ore 07:42
ci74771ht ~ # ps aux|grep shutdo
root     27585  0.0  0.0   4160   648 pts/2    S    00:58   0:00 shutdown -hP 07:42

Però ho degli warnings dopo compilazione.

Il sorgente quindi funzionante attualmente è:

ci74771ht ~ # cat Spegni.pas 
Program Spegni;

uses
  Classes, sysutils, process,unix;

        VAR ore,minuti:string[2];
        comando:string;
        s:ansistring;

Procedure Clear_old;
    begin;
        fpsystem('clear');
        fpsystem('shutdown -c');
        writeln('ho annullato il precedente shutdown');
    end;

Begin
    Clear_old;
    writeln;
    write('Inserisci ora: ');
    readln(ore);
    write('Inserisci minuti: ');
    readln(minuti);
    comando:=' shutdown -hP '+ore+':'+minuti+'&';
    s:=comando;
    fpsystem(s);
    writeln('Il sistema verrà arrestato alle ore '+ore+':'+minuti);
end.

Però ottengo questo output:

ci74771ht ~ # fpc Spegni.pas 
Free Pascal Compiler version 2.6.4 [2017/03/29] for x86_64
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling Spegni.pas
Spegni.pas(11,2) Warning: Symbol "fpSystem" is deprecated: "use ansistring version"
Spegni.pas(12,2) Warning: Symbol "fpSystem" is deprecated: "use ansistring version"
Linking Spegni


/usr/bin/ld: attenzione: link.res contiene sezioni di output; forse è stata dimenticata -T
21 lines compiled, 0.0 sec 
2 warning(s) issued

Che significa : “use ansistring version ?”

Mumble mumble … come considerare la questione ?
Se fpsystem è “deprecato” … beh sarà meglio capire come funziona RunCommand ?

Vi chiedo, se possibile farmi un esempio riguardo come utilizzare RunCommand. (scusate se ho bisogno della “use pedantic”) :expressionless:

Ho bisogno di qualche “chiarimento in merito”.

Grazie In anticipo a Tutti :slight_smile:

Mi spiace ma su freepascal non so aiutarti. C’è qualcosa sul wiki di lazarus (perché non lo usi?) che parla di questo problema. http://wiki.freepascal.org/User_Changes_2.6.2

Grazie lablinux.
Mi soono iscritto ad un forum italiano riguardante fpc e Lazarus. solo che ancora non mi hanno accettato … boh … mumble … mumble …
Magari … è un sito “morto” … comunque cercherò nello specifico.

Certo mi piacerebbe creare un programma con GUI usando Lazarus … però penso che sia meglio ricominciare passo passo … perciò prima vorrei “riprendere/ripassare” le cose “basilari” in modo da poter aquisire una certa sicurezza personale; in II tempo … se tutto va bewne cercare di “ampliare” quindi passare a Lazarus :slight_smile:

Ti ringrazio vivamente per le tue informazioni e partecipazione :slight_smile:

Se riuscirò a fare passi avanti … vi terrò informati :slight_smile:

Grazie Ancora :slight_smile:

[ot]Perché Pascal? Ci sono linguaggi migliori, specie quelli interpretati tipo python o ruby. Se proprio ti server un compliato il C o C++ ad oggetti [/ot]

Egregio lablinux … mah non c’è una ragione ben precisa … così , volevo dopo tanti anni diciamo “togliere la ruggine” :slight_smile:

Certo Python è molto interessante … anche p’erchè sfrutta nativamente i “numeri complessi” perciò buon aiuto per chi magari ha a che fare con per esempio l’elettrotecnica … (se dico scemate correggimi :|)

Comunque … fra le varie cose che usando un apple ] con 64 KB di ram quindi andavo sempre in “overflow” oppure “redim’d array error” … volevo capire se ad oggi sia possibile un “ridimensionamento di una matrice bidimensionale in Pascal”.

Python lo ritengo molto interessante; anche molto performante. Però affronto una cosa per volta (haha non sono in “multithreading” neuronalmente :D. Magari quel che chiedo è un “tallone d’Achille” per Pascal ?
Non so :expressionless: