Skocz do zawartości

python tkinter dnf


Radosław

Rekomendowane odpowiedzi

witam

Piszę sobie programik, który z ułatwi mi zarządzanie pakietami. Python, GUI Tkintera itd. Ale natknąłem się na problem.

Chcę aby instalacja pakietu była potwierdzana/przerywana przyciskami w gui Instaluj/Przerwij.

Myślę, że uda mi się to rozwiązać za pomocą przechwytywania linii z subprocess.Popen tylko, że pojawił się nastepny problem.

gdy przekazuję hasło dla sudo -S czy to przez potok

echo "password" | dnf -S install pakiet

czy przez

sudo -S <<< "password" dnf -S install pakiet

to gdzieś tam pojawia się enter i na pytanie t/N się automatycznie wciska przerywając instalację. Nie mam możliwości wybrania tak.

dodanie -n do echo nie rozwiązało problemu. Szukam takiego problemu w necie, ale czyżbym tylko ja tak miał?

ten sam efekt jest gdy np chcemy coś usunąć z pomocą sudo:

echo "password" | sudo -S rm -i /root/plik-w-katalogu-roota

Coś będę kombinował z kdesu, ale powyższe jest dla mnie zastanawiające.

Ktoś coś może pomóc?

 

Pozdrawiam

Radosław Głębicki

Odnośnik do komentarza
Udostępnij na innych stronach

dlatego napisałem, że nie pomaga zastosowanie, bo myślałem, że echo daje "return", ale to nie to.

Czy ktoś wie jak w pythonie użyć modułu dnf i coś w pythonie przez dnf zainstalować. Szukam jakiegoś poradnika i ciężko. Jeden był, ale jak czytałem to mi głowa puchła. Coś prostego, łopatologicznie: dnf.rozkaz(pakiet) i już.

W wyżej wymienionym programie doszedłem do takiej "ściany przedstawiania efektu pracy programu" Jak się instaluje w terminalu za pomocą dnf install pakiet to dostajemy ładne paski postępu. Potrafię przechwycić linie i umieścić w gui tkinter. Nawet zabrałem się za przechwytywania znaków (read(1) w odróżnieniu od readline dla całych linii) i za chiny nie mogę wyłapać postępu w terminalu, aby przenieść go do gui. A taki wget i postęp tam wyłapuję. Co jest z postepem w dnf gdzie on idzie, ani stdout, ani errout. Nawet jak chcemy w terminalu przekierować do pliku to nic się nie pojawia. Na jakim poziomie on działa - ten postęp?

Pozdrawiam

Radek Głębicki

Odnośnik do komentarza
Udostępnij na innych stronach

no wyobraź sobie, że właśnie na tamtej stronie rozbolała mnie głowa. A jeszcze mam alergię na programowanie obiektowe. Za dużo "self".

Tam jak widzę: dfn install pakiet

a poniżej 50 linii kodu, które jak rozumiem robią to samo, to pozostanę przy subproces.Popen('dnf install pakiet' ......

A te 50 linii jeszcze wymaga dodania czegoś, aby działało bo copy, paste and run nie daje efektu. To nie mój poziom. Mój program ma już prawie 1000linii i 29tyś znaków i żadnej klasy. Ja wywodzę się z basic i c i z tym pozostanę.

Może ktoś to "zwinąć" do paru liniii w pythonie odpowiadających np pakiet httpd "dnf install httpd"?

Pozdrawiam

Radek Głębicki

PS: dzięki za podpowiedź

Odnośnik do komentarza
Udostępnij na innych stronach

import dnf


if __name__ == '__main__':

	with dnf.Base() as base:
		# Repositories serve as sources of information about packages.
		base.read_all_repos()
		# A sack is needed for querying.
		base.fill_sack()

		# A query matches all packages in sack
		q = base.sack.query()

		# Derived query matches only available packages
		q_avail = q.available()
		# Derived query matches only installed packages
		q_inst = q.installed()
		print(q_inst,'#########################')
		available = q_avail.run()
		for pkg in q_inst.run():
			if pkg not in available:
				print(str(pkg))

Takie coś tam było. Kurczę, co to jest rozbijam sobie to na kawałki w konsoli pythona . Same obiekty. Przecież tkinter, a nawet qt5 nie jest tak pokręcone. To jest API dnf to ja dziękuję.

Kosmos.

Pozdrawiam

 

Odnośnik do komentarza
Udostępnij na innych stronach

Udało mi się znaleźć rozwiązanie mojego problemu paska postępu przy przechwytywaniu wyjścia dnf. W komendzie pythona subprogress.Popen trzeba dodać rozkaz pv z pakietu pv. Wygląda to tak:

'sudo -S <<< "<password>" dnf --assumeyes install httpd | pv -n 2>&1 | cat'

i wtedy przy odczycie stdout z Popen mamy jakiś ruch, lecą jakieś znaki, a to możemy przenieść jako progres do tkinter progressbar. Nie jest to idealny progres bo nie ma % postępu, ale przynajmniej wiadomo, że program coś robi.

Może się komuś przyda.

Pozdrawiam

Radek Głębicki

Odnośnik do komentarza
Udostępnij na innych stronach

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ę
×
×
  • Dodaj nową pozycję...