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
Author: Marcin Wojtczuk
Date: Thu, 05 Dec 2002 21:58
Date: Thu, 05 Dec 2002 21:58
78 lines
3263 bytes
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
Author: Jacek Konieczny
Date: Fri, 06 Dec 2002 08:56
Date: Fri, 06 Dec 2002 08:56
24 lines
1936 bytes
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
Author: Adam Karpierz
Date: Fri, 06 Dec 2002 11:17
Date: Fri, 06 Dec 2002 11:17
15 lines
1364 bytes
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
Author: Jacek Konieczny
Date: Fri, 06 Dec 2002 11:26
Date: Fri, 06 Dec 2002 11:26
10 lines
1106 bytes
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
Author: Adam Karpierz
Date: Fri, 06 Dec 2002 11:29
Date: Fri, 06 Dec 2002 11:29
18 lines
1642 bytes
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
Author: Jacek Konieczny
Date: Fri, 06 Dec 2002 16:26
Date: Fri, 06 Dec 2002 16:26
39 lines
2537 bytes
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
Author: Adam Karpierz
Date: Fri, 06 Dec 2002 20:41
Date: Fri, 06 Dec 2002 20:41
50 lines
3014 bytes
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
Author: Marcin 'Qrczak' Kowalczyk
Date: Sun, 08 Dec 2002 12:19
Date: Sun, 08 Dec 2002 12:19
13 lines
1687 bytes
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
Author: Adam Karpierz
Date: Sun, 08 Dec 2002 13:16
Date: Sun, 08 Dec 2002 13:16
16 lines
1731 bytes
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
Author: Marcin 'Qrczak' Kowalczyk
Date: Sun, 08 Dec 2002 13:52
Date: Sun, 08 Dec 2002 13:52
12 lines
1562 bytes
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
Author: Adam Karpierz
Date: Sun, 08 Dec 2002 14:46
Date: Sun, 08 Dec 2002 14:46
11 lines
1513 bytes
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