Jump to content
Radosław

python tkinter dnf

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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ź

Share this post


Link to post
Share on other sites
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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...