Tema se rezolvă individual. Orice tentativă de copiere va rezulta în 0 puncte pentru tema respectivă. Vom utiliza și sisteme automate de detectare a copierii. Dacă avem dubii, vă vom adresa întrebări suplimentare legate de temă.
Dacă aveți întrebări legate de temă, vă rugăm să scrieți un issue pe repository-ul de github https://github.com/UPB-FILS-SdE2/questions cu titlul de forma [busybox] <titlul întrebări voastre>.
Dacă doriți să primiți un email când se pun întrebări noi sau cand apar răspunsuri, accesați github https://github.com/UPB-FILS-SdE2/questions și faceți click pe Watch.
Scopul acestei teme este implementarea unui utilitar capabil să execute comenzi tip Linux bash.
Pentru rezolvarea temei veți realiza un script Python care citește de la tastatură comenzi pe care le execută. Odată rulat, executabilul va afișa un prompt de forma cmd:
urmând să primească o comandă urmată de parametrii. Prin apăsarea tastei ENTER se marchează finalul comenzii. După fiecare comandă, programul va afișa rezultatul, dacă e cazul, după care va aștepta după o altă comandă. Programul își va încheia execuția prin primirea comenzii exit
sau quit
.
Exemplu:
cmd: ls test.py my_file my_file2 cmd: echo test test cmd: exit
În continuare, vom defini comenzile suportate de utilitar, împreună cu comportamentul caracteristic și parametrii pe care acestea le suportă. Pentru orice altă comandă sau orice alt format, scriptul va afișa mesajul Invalid command.
În cazul în care comanda primită de utilitar a fost rulată cu succes, acesta va afișa informația menționată în descriere, dacă e cazul. În caz contrar, se va afișa un mesaj de eroare specific, mentionat în descrierea comenzii. Dacă nu se specifică altfel, mesajul afișat pe ecran va fi urmat de NEWLINE, iar promptul va fi afișat pe linia următoare.
Comenzile suportate de aplicația mini-busybox sunt:
x
și coloana y
. În funcție de parametrii primiți comanda va realiza următoarele acțiuni:interval
milisecunde de count
ori. Valoarea pentru count
va fi în intervalul 0-20.set
, afișează luminozitatea LED-ului specificatval
, undeva val
este un număr întreg 0-9, iar valoarea afișată în consolă este noua luminozitateComanda va afișa următoarele erori pentru următoarele cazuri:
count
nu este în intervalul 0-20.val
este în afara intervalului 0-9.Exemplu:
cmd: led on 2 3 cmd: led off 2 3 cmd: led blink 500 30 2 3 Invalid count value. cmd: led toggle 2 3 cmd: led brightness set 4 2 4 4 cmd: led brightness 2 4 4
button
poate lua valoarea A
sau B
, reprezentând unul din cele două butoane de pe placă. Comanda afișează textul True
dacă butonul specificat este apăsat și textul False
dacă butonul nu e apăsat.Comanda va afișa următoarele erori pentru următoarele cazuri:
button
este diferit de a
sau b
Exemplu:
cmd: button a True cmd: button b False
Exemplu:
cmd: light
100
<deg>
care poate să fie C/F/K
se va afișa valoarea temperaturii preluate de senzorul de temperatură în grade celsius, fahrenheit sau kelvin.
Exemplu:
cmd: temperature c 20 cmd: temperature f 68
fisier
, iar pe ecran nu se va mai afișa nimic. Dacă fișierul nu există, el va fi creat. Dacă fișierul există, conținutul acestuia va fi suprascris.fisier
, iar pe ecran nu se va mai afișa nimic. Dacă fișierul nu există, comanda va eșua și va afișa mesajul de eroare: Cannot append redirect
. Dacă fișierul există, conținutul acestuia va fi adăugat la ce există deja în fișier.Exemplu:
cmd: echo a b c a b c cmd: echo -n a b c a b ccmd: echo my awesome text > my_awesome_file
Cannot print file.
.Exemplu:
cmd: cat file1 Text in file1 cmd: cat file2 Text in file 2 cmd: cat file1 file2 Text in file1 Text in file 2 cmd: cat f Cannot print file.
Cannot move file.
.Exemplu:
cmd: mv my_file my_file2 cmd: mv f f2 Cannot move file.
Cannot remove file. File not empty.
.
În cazul unei alte erori de ștergere exceptând File not empty, se va afișa mesajul: Cannot remove file.
Exemplu:
cmd: rm my_file1 my_file2 cmd: rm my_file Cannot remove file. File not empty. cmd: rm -R my_file
dimensiune nume
.Exemplu:
cmd: ls File1 file2 cmd: ls -a File1 File2 .hidden cmd: ls -l -a 128 f1 0 f2 20 .f3
Cannot copy file
.Exemplu:
cmd: cp my_file my_file2
cmd
în variabila var
. Valoarea variabilei va fi preluată folosind construcția $var
, unde var
e numele variabilei.Exemplu:
cmd: set led_x 2 cmd: set led_y 3 cmd: led on $led_x $led_y
Invalid command
.
Exemplu:
cmd: led 2 3 Invalid command. cmd: bright Invalid command.
Tema se va încărca pe Github. Logați-vă pe site și accesați link-ul aferent temei.
Testele manuale vor fi efectuare prin rularea următoarelor comenzi:
$ git clone <your_repository> $ python3 main.py < input_test.in
Fișierele de input pentru testele manuale sunt disponibile pe github.
Fiecare fișier conține pe prima linie punctajul testului.