Radosław Napisano wczoraj o 02:28 Zgłoszenie Share Napisano wczoraj o 02:28 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 Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@sunrise Napisano 23 godziny temu Zgłoszenie Share Napisano 23 godziny temu (edytowane) 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 Edytowane 23 godziny temu przez sunrise Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Radosław Napisano 12 godzin temu Autor Zgłoszenie Share Napisano 12 godzin temu 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 Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Radosław Napisano 2 godziny temu Autor Zgłoszenie Share Napisano 2 godziny temu @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 Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@sunrise Napisano 1 godzinę temu Zgłoszenie Share Napisano 1 godzinę temu 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 Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się