Radosław Posted April 4 Report Share Posted April 4 Aktualizuję sobie system dnf'em z użyciem kdialog (lista), a w konsoli wyskakuje co będzie się aktualizowało i czy potwierdzam lub rezygnuję: Podsumowanie transakcji: Aktualizowanie: 33 pakietów Zastępowanie: 33 pakietów Całkowity rozmiar pakietów przychodzących wynosi 97 MiB. Należy pobrać 97 MiB. Po tej operacji zostanie użyte dodatkowo 396 KiB (zainstaluje 353 MiB, usunie 353 MiB). Is this ok [y/N]: Mam pid'a dnf'a robiącego tę aktualizację. w drugim terminalu daję: echo -en "y\n" > /proc/[PID DNF'a]/fd/0 w terminalu aktualizacji wskakuje "y" i przełamuje Return tak jak by potwierdzenie wskakuje, ale proces nie idzie. Próbowałem też pid'a tego bash'a i pid'a okna konsoli KDE. Pojawia się "y" z Enterem, ale nie idzie. Co robię źle? Radek Głębicki PS: docelowo chcę wychwycić pojawianie się [y/N] i dać kdialog Yes No Link to comment Share on other sites More sharing options...
@sunrise Posted April 4 Report Share Posted April 4 (edited) 3 godziny temu, Radosław napisał: Co robię źle? Zakładasz, że to działa tak jak Ci się wydaje, a tak nie jest Pisanie do stdin programu przez jego fd nie jest równe "pisaniu z klawiatury" czy nawet np. przekierowaniu "<" Aby "symulować" trzeba użyć ioctl dla terminali man ioctl_tty Prosty program wysyłający znak "y" w pythonie # tty.py import sys import fcntl import termios with open(sys.argv[1], 'w') as fd: for char in "y\n": fcntl.ioctl(fd, termios.TIOCSTI, char) Uruchomienie python tty.py /proc/PID_DNF/fd/0 PS. Może łatwiej podziel to na etapy dnf5 check-upgrade --refresh I jak Ci opowiada to uruchom sudo dnf upgrade --assumeyes Edited April 4 by sunrise Link to comment Share on other sites More sharing options...
Radosław Posted April 4 Author Report Share Posted April 4 Ciekawe jest, że myślisz, że to ja "zakładam, że tak to działa". Po prostu szukałem w necie i znalazłem to z echo, a nic z ioctl. to podpowiedź z dnf to odpada. Ja nie aktualizuję wszystkiego na raz. Gdzieś tu na forum zrobiłem wątek z użycia kdialog z wyborem pakietów do instalacji. Instaluję aktualizacje grupami ([y/N] wolę mieć, aby przerwać (użycie --assumeyes odpada) i co jakich czas sobie clonezillą zgrywam stan partycji / (root). Oczywiście popróbuję coś zdziałać z ioctl. Dzięki za podpowiedź. Radek Glebicki PS.: nawet sobie w Pythonie z użycie QT napisałem własny "kdialog list" z "live filter" i "grep -v" :-D Link to comment Share on other sites More sharing options...
Radosław Posted April 5 Author Report Share Posted April 5 @sunrise jeszcze pytanko. Próbuję zrozumieć ten skrypt. Czytam manuale. Niepokoi mnie "w" czyli "write: w: Cytuj with open(sys.argv[1], 'w') as fd: Czym grozi pomyłka w ścieżce z sys.argv[1] dla pomylonego pliku/katalogu ? Pozdrawiam Radek Glebicki Link to comment Share on other sites More sharing options...
@sunrise Posted April 5 Report Share Posted April 5 Godzinę temu, Radosław napisał: Czym grozi pomyłka w ścieżce z sys.argv[1] dla pomylonego pliku/katalogu ? Generalnie grozi tym, że będziesz wysyłał ciąg znaków nie do tego "pliku" co chcesz, a co się zdarzy, to już zależy od tego do jakiego "pliku". Jeżeli będzie to urządzenie znakowe (np. terminal lub port szeregowy) no to wyślesz do niego ten ciąg, a co on z nim zrobi to już zależy od procesu. A jak wyślesz do zwykłego pliku to program "się wykrzaczy" ponieważ to nie jest urządzenie znakowe i w tym prostym przykładzie nie ma napisanej obsługi błędów. np. przy zapisie do zwykłego pliku. # python tty.py zwykly_plik Traceback (most recent call last): File "/root/tty.py", line 7, in <module> fcntl.ioctl(fd, termios.TIOCSTI, char) ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^ OSError: [Errno 25] Inappropriate ioctl for device 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now