🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
11 messages
11 total messages Started by Marcin Wojtczuk Thu, 05 Dec 2002 21:58
skrypt do zmiany tapety i prośba o komentarz
#236
Author: Marcin Wojtczuk
Date: Thu, 05 Dec 2002 21:58
78 lines
3263 bytes
Jak wiadomo przykłady są istotą nauki, napisałem zatem przykładowy
skrypt do zmiany tapety pulpitu. Proszę Was o komentarz, wytknięcie
błędów stylistycznych, poprawki, opis co można zrobić lepiej, jak
lepiej wykorzystać pythona itp.

#v+
from os 	import access,getenv,listdir,execv,spawnv,P_WAIT
from random 	import Random
from math 	import floor
import sys

# --- customize this section --- #
images	 	= getenv('HOME') + '/obrazy/tapety/'
imgchanger	= '/usr/local/bin/icewmbg'
imgchanger_flags = ' -s '
ending		= '.chosen'
# --- DONT'T TOUCH below --- #

wallpapers 	= listdir(images)
recordfile 	= images + ending

# delete our record file from filelist, so that it isn't chosen as
# wallpaper :) (unless it's absent). Touch it if it doesn't exists
if ending in wallpapers:	
    wallpapers.remove(ending)
else:
    if spawnv( P_WAIT, "/bin/touch", ("WTF/bezsensu", recordfile) ):
	print "wanted to create %s, but failed" % (recordfile)
	sys.exit(1)

# check which wallpaper is currently displayed
if access(recordfile, 6):		#WTF? Gdzie są opisane te tryby ?
    f = open(recordfile, "r")
    current = f.readline()
    if "\n" in current:			#get rid of fsckin \n
	current = current[:-1] 	
    f.close()
    # remove current wallpaper from list of wallpapers
    if current in wallpapers:		#needed in case, file was deleted
	wallpapers.remove(current)
else:
    print "need +r access to %s! touch it at least" % (recordfile)
    sys.exit(1)


seed = Random()
chosen = wallpapers[int(floor(len(wallpapers) * seed.random()))]

# record what was chosen, so that we have true change allways
# TODO: add swich - user might don't care
if access(recordfile, 6):
    f = open(recordfile, "w")
    f.write(chosen)
    f.close()
else:
    print "need +w access to %s!" % (recordfile)
    sys.exit(1)


#change wallpaper
cmd = ( imgchanger, 
	imgchanger_flags, 
	images + chosen
	)
execv(cmd[0], cmd[1:])
#v-

Tam gdzie jest 'WTF' kończą się moje zdolności pojmowania tego co python
robi z argv dla komend. Nie dałem import * przy os, dlatego, że nadpisałoby
mi to funkcję open().

Skrypt działa (zmienia mi tapetę w gnome ;). Uprasza się o odpalanie z &.
Nie wiem czemu icewmbg, chodź umiera, to jednak nie oddaje klawiatury.

Dziękuję za uwagę i proszę o pomoc.
-- 
    [ http://www.stringi.com/viper/ ] [ GG 1513591 ]
	All good things come to those who wait
Re: skrypt do zmiany tapety i prośba o komentarz
#237
Author: Jacek Konieczny
Date: Fri, 06 Dec 2002 08:56
24 lines
1936 bytes
In article <h5iosa-e8c.ln@fastviper.viper.lan>, Marcin Wojtczuk wrote:
>     if spawnv( P_WAIT, "/bin/touch", ("WTF/bezsensu", recordfile) ):
Czemu nie os.system(). IMHO spanv() jest tu zupełnie niepotrzebne, 
i niepotrzbnie koplikuje sprawę. 

A jeśli już chodzi o zachowanie spawnv, to pierwszym argumentem powinna
być nazwa wywoływanego programu, czyli "/bin/touch". Zwykle jest ona
ignorowana przez wywoływany program, ale czasem ma wpływ na jego
działanie.

> # check which wallpaper is currently displayed
> if access(recordfile, 6):		#WTF? Gdzie są opisane te tryby ?
W dokumentacji. Pewnie chodzi ci o os.F_OK, os.R_OK... itp.

> Tam gdzie jest 'WTF' kończą się moje zdolności pojmowania tego co python
> robi z argv dla komend. Nie dałem import * przy os, dlatego, że nadpisałoby
> mi to funkcję open().
Nigdy nie powinno się korzystać z "from ... import *". W większości
przypadków dobrze jest unikać wszelkich "form ... import ...". Program
będzie wtedy znacznie bardziej czytelny.  Teraz czytając go musiałem się
zastanawiać skąd to spanv(), czy access().

Pozdrowienia,
        Jacek
Re: skrypt do zmiany tapety i prośba o komentarz
#238
Author: Adam Karpierz
Date: Fri, 06 Dec 2002 11:17
15 lines
1364 bytes
Użytkownik "Jacek Konieczny" <jajcus@bnet.pl> napisał:

> In article <h5iosa-e8c.ln@fastviper.viper.lan>, Marcin Wojtczuk wrote:

> Czemu nie os.system(). IMHO spanv() jest tu zupełnie niepotrzebne,
> i niepotrzbnie koplikuje sprawę.

Nieprawda.
Bardzo slusznie Marcin uzyl spawnv.
Zwroc uwage na flage P_WAIT
system() nie czeka. Idzie sobie rownolegle.

--
Adam Karpierz
Re: skrypt do zmiany tapety i prośba o komentarz
#239
Author: Jacek Konieczny
Date: Fri, 06 Dec 2002 11:26
10 lines
1106 bytes
In article <asq16m$6qj$1@news.tpi.pl>, Adam Karpierz wrote:
> Nieprawda.
> Bardzo slusznie Marcin uzyl spawnv.
> Zwroc uwage na flage P_WAIT
> system() nie czeka. Idzie sobie rownolegle.
Pomyliło ci się z fork()


Pozdrowienia,
        Jacek
Re: skrypt do zmiany tapety i prośba o komentarz
#240
Author: Adam Karpierz
Date: Fri, 06 Dec 2002 11:29
18 lines
1642 bytes
Użytkownik "Jacek Konieczny" <jajcus@bnet.pl> napisał:

> In article <asq16m$6qj$1@news.tpi.pl>, Adam Karpierz wrote:
> > Nieprawda.
> > Bardzo slusznie Marcin uzyl spawnv.
> > Zwroc uwage na flage P_WAIT
> > system() nie czeka. Idzie sobie rownolegle.
> Pomyliło ci się z fork()

Nie, nie pomylilo mi sie.
Tyle ze precyzyjniej powinienem powiedziec
ze to co wywolywane jest przez system() moze
sobie pojsc rownolegle.
spawnv z P_WAIT zapewnia ze wpierw skonczy sie to co
jest wywolywane i dopiero wtedy skrypt pojdzie dalej

--
Adam Karpierz
Re: skrypt do zmiany tapety i prośba o komentarz
#241
Author: Jacek Konieczny
Date: Fri, 06 Dec 2002 16:26
39 lines
2537 bytes
In article <asq1u3$dg9$1@news.tpi.pl>, Adam Karpierz wrote:
> Nie, nie pomylilo mi sie.
> Tyle ze precyzyjniej powinienem powiedziec
> ze to co wywolywane jest przez system() moze
> sobie pojsc rownolegle.
Co to znaczy "może sobie pójść równolegle"?

$ python
Python 2.2.1 (#1, Sep  9 2002, 21:28:03)
[GCC 2.95.4 20010319 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> os.system("read")
>>> import os
>>> os.system("/bin/sleep 10")
 ... tutaj stoi 10 sekund ...
0

Jak dam "/bin/sleep 10 &" to rzeczywiście system() nie będzie czekał,
ale to nie znaczy, że po spanv() się tak nie da zrobić.

> spawnv z P_WAIT zapewnia ze wpierw skonczy sie to co
> jest wywolywane i dopiero wtedy skrypt pojdzie dalej
Co to znaczy "skończy się to co jest wywoływane"?

Jeżeli w ten sposób uruchomisz jakiegoś demona, to spawnv() zaraz wróci.

Różnice między system() a spawnv() są następujące:
- system uruchamia komendę poprzez interpreter poleceń systemowy 
  (w systemach UNIX powłokę). Powoduje to, że czasami niepotrzebnie jest
  ładowany dodatkowy program, ale zyskujemy dodatkowe możliwości:
  przekierowania, potoki, wstawianie zmiennych środowiska itp. 

- spawn() wymaga jawnego podania listy argumentów wywoływanego programu.
  Czasem to jest ułatwienie (nie trzeba ich cytować gdy zawierają spacje
  i znaki specjalne), czasem utrudnienie --- np. gdy mamy je w postaci "linii
  komend".

Pozdrowienia,
        Jacek
Re: skrypt do zmiany tapety i prośba o komentarz
#242
Author: Adam Karpierz
Date: Fri, 06 Dec 2002 20:41
50 lines
3014 bytes
Użytkownik "Jacek Konieczny" <jajcus@bnet.pl> napisał:

> In article <asq1u3$dg9$1@news.tpi.pl>, Adam Karpierz wrote:
> > Nie, nie pomylilo mi sie.
> > Tyle ze precyzyjniej powinienem powiedziec
> > ze to co wywolywane jest przez system() moze
> > sobie pojsc rownolegle.
> Co to znaczy "może sobie pójść równolegle"?

To znaczy ze np. program  niekonsolowy
wywolywany poprzez system() sobie
pojdzie osobno a konsola (shell) osobno
(dokladnie tak jak w "recznym" wywolaniu)
i nie pomoze tu to ze wewnetrznie system() korzysta
z P_WAIT poniewaz to P_WAIT tyczy
shella a nie samego programu.
Jesli ten sam program wywolasz bezposrednio
poprrzez spawn to bedzie ok bo zaden
shell nie bedzie posredniczyl.
Po prostu spawn bedzie czekal na skonczenie
samego programu a system jedynei na skonczenie
shella za posrednictwem ktorego wywolywany jest
program. To jest ta roznica.

> Jeżeli w ten sposób uruchomisz jakiegoś demona, to spawnv()
> zaraz wróci.

No to wiadomo ale taki pwrot to jest normalne zakonczenie
uruchomienia demona wiec wszytsko jest ok

> Różnice między system() a spawnv() są następujące:
> - system uruchamia komendę poprzez interpreter poleceń systemowy
>   (w systemach UNIX powłokę). Powoduje to, że czasami niepotrzebnie jest
>   ładowany dodatkowy program, ale zyskujemy dodatkowe możliwości:
>   przekierowania, potoki, wstawianie zmiennych środowiska itp.

I poprez posrednictwo tej powloki uzyskujemy "dodatkowo" ten efekt
o ktorym mowilem wyzej.

> - spawn() wymaga jawnego podania listy argumentów wywoływanego programu.
>   Czasem to jest ułatwienie (nie trzeba ich cytować gdy zawierają spacje
>   i znaki specjalne), czasem utrudnienie --- np. gdy mamy je w postaci
"linii
>   komend".

Zgadza sie ale nie ma duzej roznicy.
Z reguly wiemy co chcemy uruchomic i z jakimi parametrami.

--
Adam Karpierz
Re: skrypt do zmiany tapety i prośba o komentarz
#243
Author: Marcin 'Qrczak' Kowalczyk
Date: Sun, 08 Dec 2002 12:19
13 lines
1687 bytes
Fri, 6 Dec 2002 21:41:33 +0100, Adam Karpierz <karpierz@_NOSPAM_alpha.pl> pisze:

> i nie pomoze tu to ze wewnetrznie system() korzysta z P_WAIT poniewaz
> to P_WAIT tyczy shella a nie samego programu.

Ale szel czeka na program. Chyba że program pójdzie w tło (wyforkuje
inny i sam się skończy), ale wtedy i spawn nie pomoże. Tak czy siak,
wychodzi na to samo.

-- 
  __("<      Marcin Kowalczyk
  \__/     qrczak@knm.org.pl
   ^^    http://qrnik.knm.org.pl/~qrczak/
Re: skrypt do zmiany tapety i prośba o komentarz
#244
Author: Adam Karpierz
Date: Sun, 08 Dec 2002 13:16
16 lines
1731 bytes
Użytkownik "Marcin 'Qrczak' Kowalczyk" <qrczak@knm.org.pl> napisał:

> Tak czy siak, wychodzi na to samo.

Alez skad.
Uruchom sobie windowsowy program konsolowy poprzez
system(0) oraz dowony GUI (np. calc.exe) a zobaczysz roznice.
oraz dowolny GUI np calc.exe
Urochomienie programu konslowego zarowno prze system()
jak i przez spawn bedzie identyczne, ale przy GUI
system() (a raczej shell przez niego wywolywany) nie poczeka
na zakonczenie programu. Wywolanie programu przez spawn
zapobiegnie temu gdyz wywola _wprost_ program.

--
Adam Karpierz
Re: skrypt do zmiany tapety i prośba o komentarz
#245
Author: Marcin 'Qrczak' Kowalczyk
Date: Sun, 08 Dec 2002 13:52
12 lines
1562 bytes
Sun, 8 Dec 2002 14:16:55 +0100, Adam Karpierz <karpierz@_NOSPAM_alpha.pl> pisze:

> Alez skad.
> Uruchom sobie windowsowy program konsolowy poprzez
> system(0) oraz dowony GUI (np. calc.exe) a zobaczysz roznice.

Nie mam Windowsów.

-- 
  __("<      Marcin Kowalczyk
  \__/     qrczak@knm.org.pl
   ^^    http://qrnik.knm.org.pl/~qrczak/
Re: skrypt do zmiany tapety i prośba o komentarz
#246
Author: Adam Karpierz
Date: Sun, 08 Dec 2002 14:46
11 lines
1513 bytes
Użytkownik "Marcin 'Qrczak' Kowalczyk" <qrczak@knm.org.pl> napisał:

> Nie mam Windowsów.

To sobie zainstaluj ;)

W kazdym razie o tej roznicy uzywania system i spawn trzeba wiedziec
bo czasami jest dosc wazna.

--
Adam Karpierz
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads