-
11. Data: 2013-03-16 16:32:24
Temat: Re: PowerShell - ktos uzywa?
Od: Piotr Chamera <p...@p...onet.pl>
W dniu 2013-03-16 15:00, Edek Pienkowski pisze:
> Python nie wspiera natywnie ani WinAPI ani właściwie żadnego innego API.
> Ma prymitywny dostęp do plików i możliwość exec-a, czyli wykonywania komend,
> w sensie innych programów z podaniem parametrów.
> (...)
> Guglaj. Jeżeli ktoś zintegrował Pythona z administracją Win to ściągnij
> lub zapłać, jeżeli nie to odpuść. Zresztą powyżej jest odpowiedź na to
> pytanie wprost, co nie znaczy, że ktoś tego z jakiegoś powodu nie
> próbował zrobić.
Istnieje coś takiego http://sourceforge.net/projects/pywin32/
Używam do porozumiewania się z programami przez COM (Adobe
Illustrator, InDesign, Corel pod Win XP). Wiele programów pod
windows udostępnia COM i bardzo fajnie się z tym pracuje. Chyba
jest też możliwość pracy z winapi, ale nie używałem.
-
12. Data: 2013-03-16 19:54:20
Temat: Re: PowerShell - ktos uzywa?
Od: "M.M." <m...@g...com>
W dniu sobota, 16 marca 2013 12:48:50 UTC+1 użytkownik Marek Borowski napisał:
> Obawiam sie ze w przypadku windows to by sie nie sprawdzilo. Powershell
> ma ponad 3000 cmd-letow ktore nie maja zamiennika w postaci .exe. Nie
> wydaje mi sie tez aby powstatly dekykowane bibioteki do Perla.
> W windows 2012 kazda klikana akcja moze byc zapisana jaka ciag polecen
> powershell. Takze jesli windows i skrypty to wybor jest klarowny.
Czyli powershell to nie tylko język, ale zestaw gotowców specjalnie do
administracji windows? Skoro tak, to Perle, Pythony itd nie będą miał
szans. W przypadku gdy jakaś procedura naprawdę będzie wymagała
normalnego języka programowania, to zawsze można ją napisać w C i potem
z powershella wywołać. Hmm... ale w drugą stronę też można, logika w
innym języku, a to co charakterystyczne dla windows w powershellu.
Gdy mi czegoś brakowało w cmd, to pisałem programik w C++ i z pliku *.bat
wywoływałem. Tak więc jest jeszcze możliwość połączenia dwóch języków.
Pozdrawiam
-
13. Data: 2013-03-16 20:14:17
Temat: Re: PowerShell - ktos uzywa?
Od: Roman W <b...@g...pl>
On Sat, 16 Mar 2013 12:23:17 +0000 (UTC), Adam Przybyla
<a...@r...pl> wrote:
> ... jesli juz, pomysl o pythonie. Zastosujesz wszedzie, nie tylko
na
> niszowym PC. Z powazaniem
Ze niby co jest niszowe, PC z Windows? Lol.
RW
-
14. Data: 2013-03-16 21:39:08
Temat: Re: PowerShell - ktos uzywa?
Od: "R.e.m.e.K" <g...@d...null>
Dnia Sat, 16 Mar 2013 16:32:24 +0100, Piotr Chamera napisał(a):
> Istnieje coś takiego http://sourceforge.net/projects/pywin32/
> Używam do porozumiewania się z programami przez COM (Adobe
> Illustrator, InDesign, Corel pod Win XP). Wiele programów pod
> windows udostępnia COM i bardzo fajnie się z tym pracuje. Chyba
> jest też możliwość pracy z winapi, ale nie używałem.
To rzeczywiscie wyglada tak jak moje o tym wyobrazenie ;-)
Dzieki, bede probowal ugryzc.
--
pozdro
R.e.m.e.K
-
15. Data: 2013-03-17 00:52:03
Temat: Re: PowerShell - ktos uzywa?
Od: "AK" <n...@n...com>
Użytkownik "Piotr Chamera" <p...@p...onet.pl> napisał:
> Chyba jest też możliwość pracy z winapi, ale nie używałem.
Skrotowo.
Mimo ze glowny focus w PyWinie to COM to jest tez pelne Win API.
PS: Nie potrzeba nawet PyWina.
Standardowe ctypes moze w zupelnosci wystarczyc.
Ponizej zmodyfikowany pod ctypes przykladzik
(uruchomi sie na standardowym Pythonie):
--------------------------------------------
#import win32con
class win32con:
NULL = 0
CS_VREDRAW = 1
CS_HREDRAW = 2
IDI_APPLICATION = 32512
IDC_ARROW = 32512
WHITE_BRUSH = 0
WS_OVERLAPPED = 0
WS_CAPTION = 12582912
WS_SYSMENU = 524288
WS_THICKFRAME = 262144
WS_MINIMIZEBOX = 131072
WS_MAXIMIZEBOX = 65536
WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED | \
WS_CAPTION | \
WS_SYSMENU | \
WS_THICKFRAME | \
WS_MINIMIZEBOX | \
WS_MAXIMIZEBOX)
CW_USEDEFAULT = -2147483648
SW_SHOWNORMAL = 1
WM_PAINT = 15
WM_CLOSE = 16
WM_DESTROY = 2
DT_SINGLELINE = 32
DT_CENTER = 1
DT_VCENTER = 4
import sys
import ctypes as ct
from ctypes import windll as win
WNDPROC = ct.WINFUNCTYPE(ct.c_long, ct.c_int, ct.c_uint, ct.c_int, ct.c_int)
class WNDCLASS(ct.Structure):
_fields_ = [('style', ct.c_uint),
('lpfnWndProc', WNDPROC),
('cbClsExtra', ct.c_int),
('cbWndExtra', ct.c_int),
('hInstance', ct.c_int),
('hIcon', ct.c_int),
('hCursor', ct.c_int),
('hbrBackground', ct.c_int),
('lpszMenuName', ct.c_char_p),
('lpszClassName', ct.c_char_p)]
class RECT(ct.Structure):
_fields_ = [('left', ct.c_long),
('top', ct.c_long),
('right', ct.c_long),
('bottom', ct.c_long)]
class PAINTSTRUCT(ct.Structure):
_fields_ = [('hdc', ct.c_int),
('fErase', ct.c_int),
('rcPaint', RECT),
('fRestore', ct.c_int),
('fIncUpdate', ct.c_int),
('rgbReserved', ct.c_char * 32)]
class POINT(ct.Structure):
_fields_ = [('x', ct.c_long),
('y', ct.c_long)]
class MSG(ct.Structure):
_fields_ = [('hwnd', ct.c_int),
('message', ct.c_uint),
('wParam', ct.c_int),
('lParam', ct.c_int),
('time', ct.c_int),
('pt', POINT)]
def ErrorIfZero(handle):
if handle == 0:
raise WinError()
else:
return handle
def MainWin():
CreateWindowEx = win.user32.CreateWindowExA
CreateWindowEx.argtypes = [ct.c_int, ct.c_char_p, ct.c_char_p, ct.c_int,
ct.c_int, ct.c_int,
ct.c_int, ct.c_int, ct.c_int, ct.c_int, ct.c_int,
ct.c_int]
CreateWindowEx.restype = ErrorIfZero
# Define Window Class
wndClass = WNDCLASS()
wndClass.style = win32con.CS_HREDRAW | win32con.CS_VREDRAW
wndClass.lpfnWndProc = WNDPROC(WndProc)
wndClass.cbClsExtra = wndClass.cbWndExtra = 0
wndClass.hInstance = win.kernel32.GetModuleHandleA(ct.c_int(win32con.NULL
))
wndClass.hIcon = win.user32.LoadIconA(ct.c_int(win32con.NULL),
ct.c_int(win32con.IDI_APPLICATION))
wndClass.hCursor = win.user32.LoadCursorA(ct.c_int(win32con.NULL),
ct.c_int(win32con.IDC_ARROW))
wndClass.hbrBackground = win.gdi32.GetStockObject(ct.c_int(win32con.WHITE_BRU
SH))
wndClass.lpszMenuName = None
wndClass.lpszClassName = "MainWin"
# Register Window Class
if not win.user32.RegisterClassA(ct.byref(wndClass)):
raise WinError()
# Create Window
hwnd = CreateWindowEx(0,
wndClass.lpszClassName,
"Python Window",
win32con.WS_OVERLAPPEDWINDOW,
win32con.CW_USEDEFAULT,
win32con.CW_USEDEFAULT,
win32con.CW_USEDEFAULT,
win32con.CW_USEDEFAULT,
win32con.NULL,
win32con.NULL,
wndClass.hInstance,
win32con.NULL)
# Show Window
win.user32.ShowWindow(ct.c_int(hwnd), ct.c_int(win32con.SW_SHOWNORMAL))
win.user32.UpdateWindow(ct.c_int(hwnd))
# Pump Messages
msg = MSG()
pMsg = ct.pointer(msg)
NULL = ct.c_int(win32con.NULL)
while win.user32.GetMessageA(pMsg, NULL, 0, 0) != 0:
win.user32.TranslateMessage(pMsg)
win.user32.DispatchMessageA(pMsg)
return msg.wParam
def WndProc(hwnd, message, wParam, lParam):
ps = PAINTSTRUCT()
rect = RECT()
if message == win32con.WM_PAINT:
hdc = win.user32.BeginPaint(ct.c_int(hwnd), ct.byref(ps))
win.user32.GetClientRect(ct.c_int(hwnd), ct.byref(rect))
win.user32.DrawTextA(ct.c_int(hdc),
"Python Powered Windows" ,
ct.c_int(-1), ct.byref(rect),
win32con.DT_SINGLELINE|win32con.DT_CENTER|win32con.D
T_VCENTER)
win.user32.EndPaint(ct.c_int(hwnd), ct.byref(ps))
return 0
elif message == win32con.WM_DESTROY:
win.user32.PostQuitMessage(0)
return 0
return win.user32.DefWindowProcA(ct.c_int(hwnd), ct.c_int(message),
ct.c_int(wParam),
ct.c_int(lParam))
if __name__=='__main__':
sys.exit(MainWin())
PS: w ctypes.windll jest dostep dllek:
kernel32
user32
shell32
gdi32
w ctypes.wintypes do wielu stalych i nieco struktur
(ale pywin jest tu zdecydowanie pelniejszy. hint : modul win32api)
------------------------------
Przy okazji przykladzik Wordowania poprzez PyWin COM:
import sys
from win32com.client import constants
import win32com.client
word = win32com.client.Dispatch('Word.Application')
word.Visible = True
doc = word.Documents.Add()
doc.Activate()
range = doc.Range(Start=0, End=0)
range.Text = 'Czesc Kolego ! Tu jestem :)'
---------------------------
a tu Excelowania:
import sys
from win32com.client import constants
import win32com.client
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = True
if len(excel.Workbooks) == 0:
excel.Workbooks.Add()
excel.Cells(1,1).Value = "Hello"
---------------------------------------------------
Tu jakies zabawy z IE przez COM:
import time
import win32com.client
READYSTATE_COMPLETE = 4
ie = win32com.client.Dispatch('InternetExplorer.Applicati
on')
def result(ie):
while True:
state = ie.ReadyState
if state == READYSTATE_COMPLETE:
break
time.sleep(0.1)
return ie.Document.documentElement.innerHTML
def getURL(ie, url):
ie.Navigate(url)
return result(ie)
def refreshURL(ie):
ie.Refresh()
return result(ie)
if __name__ == '__main__':
print getURL(ie, 'http://python.pl')
----------------------------------------
A tu jakies zabawy z Pythonem na cudzym
komputerze poprzez DCOM ale tez z wykorzystaniem
WinAPI:
import pythoncom, win32com.client
import win32api
clsctx=pythoncom.CLSCTX_LOCAL_SERVER
i = win32com.client.DispatchEx("Python.Interpreter", "PLK-PLEWALSK-XP",
clsctx=clsctx)
i.Exec("import win32api")
print i.Eval("win32api.GetComputerName()")
print win32api.GetComputerName()
PS: No ale oczywiscie "Python nie ma dostepu do WinAPI ani do niczego... " ;)
AK
-
16. Data: 2013-03-17 00:56:27
Temat: Re: PowerShell - ktos uzywa?
Od: "AK" <n...@n...com>
Użytkownik "Piotr Chamera" <p...@p...onet.pl> napisał:
> Wiele programów pod windows udostępnia COM
Mozna spokojnie powiedziec ze wiekszosc (a wszystkie powazniejsze).
Tylko ze trzeba sie tego naumiec, a taki np. AutoCAD tp daje API
ActiveX-owe liczace tysiace funkcji.
PS: Uj biedne i nieswiadome te ayatollahy Unixow wszelkich ;)
AK
-
17. Data: 2013-03-17 01:12:51
Temat: Re: PowerShell - ktos uzywa?
Od: "AK" <n...@n...com>
Użytkownik "AK" <n...@n...com> napisał w wiadomości
news:ki30rj$q0s$1@speranza.aioe.org...
> Użytkownik "Piotr Chamera" <p...@p...onet.pl> napisał:
>
>> Wiele programów pod windows udostępnia COM
>
> Mozna spokojnie powiedziec ze wiekszosc (a wszystkie powazniejsze).
> Tylko ze trzeba sie tego naumiec, a taki np. AutoCAD tp daje API
> ActiveX-owe liczace tysiace funkcji.
>
> PS: Uj biedne i nieswiadome te ayatollahy Unixow wszelkich ;)
>
> AK
Jeszcze moze sie komus przydac COMowy dostep do ADO.
Kilka linijek raptem, a dostep do wszystkiego SQLowego poprzez
standardowe dla Win ADO API:
To fragment bardzo starych jakies wypocin i nawet nie wiem co robiace
i dlaczego tak'namotane. To ma sluzyc _tylko_ jako zrab sposoby dostepu
do ADO API przez COM.
-----------------
def openBase(server, database, user=None, password=None):
import win32com.client
import pywintypes
def cn_cursor(self):
def rs_close(self):
pass
rs = win32com.client.Dispatch('ADODB.Recordset')
rs.ActiveConnection = self
rs.execute = self.Execute
rs.close = rs_close
return rs
def cn_commit(self):
pass
cn = win32com.client.Dispatch('ADODB.Connection')
cn.cursor = cn_cursor
cn.commit = cn_commit
cn.close = cn.Close
# oConn.Open "Provider=OraOLEDB.Oracle;" & _
# "Data Source=MyOracleDB;" & _
# "OSAuthent=1"
# DSN = 'Provider=msdaora;' +
# 'Data Source=BMM;' +
# 'User Id=/;' +
# 'Password='
# Set connection properties.
cn.Provider = 'sqloledb'
cn.Properties['Data Source'].Value = server
cn.Properties['Initial Catalog'].Value = database
if '.' not in server:
cn.Properties['Integrated Security'].Value = 'SSPI'
else:
cn.Properties['User ID'].Value = user
cn.Properties['Password'].Value = password
# Open connection.
cn.Open()
return cn
def createCm(cn):
import win32com.client
import pywintypes
# cm = CreateCm(cn)
# cm.CommandText = cmd
# rs = cm.Execute()
cm = win32com.client.Dispatch('ADODB.Command')
cm.ActiveConnection = cn
return cm
---------------------------------
PS: PyWinowy modul "adodbapi" do powazniejszych zastosowan
http://sourceforge.net/projects/adodbapi
AK
-
18. Data: 2013-03-17 11:14:42
Temat: Re: PowerShell - ktos uzywa?
Od: PawelS <c...@1...pl>
R.e.m.e.K pisze:
> Dnia Sat, 16 Mar 2013 12:54:09 +0100, PawelS napisał(a):
>
>>> Ale skladnia Perla mnie mocno odrzuca :/
>> A jaka to konkretnie składnia Perla Cię odrzuca,
>> mógłbyś podać przykłady (tak z ciekawości pytam).
>
> Chocby pierwszy lepszy z polskiej wiki:
>
> $_ = "Magiczna liczba to 150\n";
> print;
> s/\d+/-1/;
> print;
To jest niestety problem ... wikipedii i wikipedystów,
przedstawiających takie, a nie inne przykłady
a na to nic nie poradzimy ...
To powyżej powinno być zapisane:
my $var; # using strict w perlu trzeba deklarować jednak zmienne ;)
$var="Magiczna liczba to 150\n";
print($var);
# na to niestety nie ma akurat rady, chyba że własna sub:
# coś na kształt PHP:
# sub preg_replace {
# my ($pattern,$replacement,$subject)=@_;
# $subject=~s/$pattern/$replacement/g;
# return $subject;
# }
$var=~s/\d+/-1/; # lub $var=preg_replace('\d+', '-1', $var);
print($var);
Jak dla mnie tak jest czytelniej,
wystarczy przestać używać wynalazków i skrótów perla.
> Albo:
>
> $n = $#a - $[ + 1;
> print "ilosc elementow w wektorze: $n \n";
>
> Taki $#a czy $[ jako zywo przypomina mi idee Brainfucka, ktory jest fajny,
> bo dowcipny i pomyslowy, ale jest tylko zartem.
Jeśli nie można czegoś zmienić, to ...
$#a - odpowiednik: count(ARRAY)-1
ewentualnie, można zapisać własne sub:
# sub count { my (@LIST)=@_; return $#LIST; }
# przy czym to mylące, bo zwraca indeks ostatniego elementu
# powinno być raczej: return $#LIST+1;
przy czym to ARRAY to LIST, a jest jeszcze HASH,
tu akurat w wielu językach jest to lepiej rozwiązane
bez podziału na listę (klucze numeryczne)
i hash (klucze to ciągi znaków)
>> Wprawdzie Perl ma pewne swoje takie, a nie inne konstrukcje,
>> jednakże w Perlu można pisać całkiem czytelne programy,
>> składnią przypominające programy pisane w C
>> (oczywiście poza pewnymi drobnymi wyjątkami).
>
> W Pythonie tez mozna, w Rubym tez mozna, ostatecznie w Visual Basicu tez
> mozna. To nie jest argument, ze da sie pisac czytelnie, czytelnosc powinna
> byc odgornie narzucona imho.
Niestety z racji, że python narzuca na formatowanie,
to i nie bardzo mi się podoba.
Często stosuję tego typu pseduo kompresję kodu:
if (conditional) { $a=1; $B[2]=2; $C['key']=3; }
a gdzie indziej jeśli to potrzebne dekompresję:
if (conditional) {
$a=1; # bo jest to pierwsza zmienna w if ;)
$B[2]=2; # bo jest to druga zmienna w if, to klucz = 2 i wartość = 2
$C['key']=3; # bo musi być inaczej niż w poprzednich liniach
}
Poza tym zawsze się zastanawiam,
jeśli w pytonie napiszę:
if conditional
instrukcja # linia rozpoczęta 1 tabulatorem
instrukcja # linia rozpoczęta 4 spacjami
instrukcja # linia rozpoczęta 1 tabulatorem
instrukcja # linia rozpoczęta 4 spacjami
to pytanie jak python to zinterpretuje?
Przeglądając kody źródłowe (like C) często widzę
mieszany styl wcięć, kilka linii ładnie spacjami,
kolejne linie ładnie tabulatorami,
i jeśli ja mam inne ustawienia np: vim ts=4 sw=4
to niestety kod rozjeżdża mi się na ekranie,
po prostu cudowny haos ...
a i nawet kody w pythonie tak zapisane skrypty widziałem ...
co dla mnie jest zastanawiające jak to się wykona
analogicznie jak dla Ciebie powyższe perlowe replace ...
-
19. Data: 2013-03-17 12:14:23
Temat: Re: PowerShell - ktos uzywa?
Od: Adam Przybyla <a...@r...pl>
Roman W <b...@g...pl> wrote:
> On Sat, 16 Mar 2013 12:23:17 +0000 (UTC), Adam Przybyla
> <a...@r...pl> wrote:
>> ... jesli juz, pomysl o pythonie. Zastosujesz wszedzie, nie tylko
> na
>> niszowym PC. Z powazaniem
>
> Ze niby co jest niszowe, PC z Windows? Lol.
... niszowy jest PC, niewazne z jakim systemem. Z powazaniem
Adam Przybyla
-
20. Data: 2013-03-17 12:27:47
Temat: Re: PowerShell - ktos uzywa?
Od: "R.e.m.e.K" <g...@d...null>
Dnia Sun, 17 Mar 2013 11:14:42 +0100, PawelS napisał(a):
>>> A jaka to konkretnie składnia Perla Cię odrzuca,
>>> mógłbyś podać przykłady (tak z ciekawości pytam).
>>
>> Chocby pierwszy lepszy z polskiej wiki:
>>
>> $_ = "Magiczna liczba to 150\n";
>> print;
>> s/\d+/-1/;
>> print;
> To jest niestety problem ... wikipedii i wikipedystów,
> przedstawiających takie, a nie inne przykłady
> a na to nic nie poradzimy ...
Zawsze mozesz wyedytowac wiki i poprawic, sam tak czasem robie :-)
> To powyżej powinno być zapisane:
> my $var; # using strict w perlu trzeba deklarować jednak zmienne ;)
> $var="Magiczna liczba to 150\n";
> print($var);
> # na to niestety nie ma akurat rady, chyba że własna sub:
> # coś na kształt PHP:
> # sub preg_replace {
> # my ($pattern,$replacement,$subject)=@_;
> # $subject=~s/$pattern/$replacement/g;
> # return $subject;
> # }
> $var=~s/\d+/-1/; # lub $var=preg_replace('\d+', '-1', $var);
> print($var);
> Jak dla mnie tak jest czytelniej,
> wystarczy przestać używać wynalazków i skrótów perla.
Ale jak sam piszesz przestac nie tak latwo, bo "na to niestety nie ma rady".
>> Albo:
>> $n = $#a - $[ + 1;
>> print "ilosc elementow w wektorze: $n \n";
>>
>> Taki $#a czy $[ jako zywo przypomina mi idee Brainfucka, ktory jest fajny,
>> bo dowcipny i pomyslowy, ale jest tylko zartem.
btw powyzszy przyklad nie jest juz z wiki, tylko jakiegos studenckiego
skryptu.
> Jeśli nie można czegoś zmienić, to ...
> $#a - odpowiednik: count(ARRAY)-1
> ewentualnie, można zapisać własne sub:
> # sub count { my (@LIST)=@_; return $#LIST; }
> # przy czym to mylące, bo zwraca indeks ostatniego elementu
> # powinno być raczej: return $#LIST+1;
> przy czym to ARRAY to LIST, a jest jeszcze HASH,
> tu akurat w wielu językach jest to lepiej rozwiązane
> bez podziału na listę (klucze numeryczne)
> i hash (klucze to ciągi znaków)
czyli koszmarek :)
>>> Wprawdzie Perl ma pewne swoje takie, a nie inne konstrukcje,
>>> jednakże w Perlu można pisać całkiem czytelne programy,
>>> składnią przypominające programy pisane w C
>>> (oczywiście poza pewnymi drobnymi wyjątkami).
Ja zdaje sobie sprawe, ze po miesiacu perlowania nie bede sie juz potykal o
te dziwactwa, ale naprawde wole power inwestowac w rzeczy bardziej
uniwersalne niz pomysly zwyciezcy konkursu "najbardziej zamotana skladnia".
>> W Pythonie tez mozna, w Rubym tez mozna, ostatecznie w Visual Basicu tez
>> mozna. To nie jest argument, ze da sie pisac czytelnie, czytelnosc powinna
>> byc odgornie narzucona imho.
> Niestety z racji, że python narzuca na formatowanie,
> to i nie bardzo mi się podoba.
> Często stosuję tego typu pseduo kompresję kodu:
> if (conditional) { $a=1; $B[2]=2; $C['key']=3; }
> a gdzie indziej jeśli to potrzebne dekompresję:
> if (conditional) {
> $a=1; # bo jest to pierwsza zmienna w if ;)
> $B[2]=2; # bo jest to druga zmienna w if, to klucz = 2 i wartość = 2
> $C['key']=3; # bo musi być inaczej niż w poprzednich liniach
> }
Teraz ja z ciekawosci spytam. Po co stosujesz kompresje? Masz jakis cel w
tym, zeby plik zrodla bym mniejszy? Osobiscie unikam takich praktyk jak
ognia, bo po roku, gdy musze ten kod czytac to chetnie sam bym sie kopnal w
dupe za taki styl. Znaczy juz nie musze, bo od lat tego nie robie.
> Poza tym zawsze się zastanawiam,
> jeśli w pytonie napiszę:
> if conditional
> instrukcja # linia rozpoczęta 1 tabulatorem
> instrukcja # linia rozpoczęta 4 spacjami
> instrukcja # linia rozpoczęta 1 tabulatorem
> instrukcja # linia rozpoczęta 4 spacjami
>
> to pytanie jak python to zinterpretuje?
Czy to nie zalezy od ustawien kompilatora? Poza tym uzywajac dobrego edytora
mozna o tym problemie zapomniec bez wzgledu na to czy uzywasz spacji, taba
czy obu naraz. Mam na mysli edytor, ktory w locie podmieni taby na spacje
lub spacja na taby - tak jak chcesz.
Zatem jest to problem wagi lekkiej, w przeciwienstwie do perlowych kompresji
zabetonowanych w jezyk na zawsze.
> Przeglądając kody źródłowe (like C) często widzę
> mieszany styl wcięć, kilka linii ładnie spacjami,
> kolejne linie ładnie tabulatorami,
> i jeśli ja mam inne ustawienia np: vim ts=4 sw=4
> to niestety kod rozjeżdża mi się na ekranie,
> po prostu cudowny haos ...
> a i nawet kody w pythonie tak zapisane skrypty widziałem ...
> co dla mnie jest zastanawiające jak to się wykona
> analogicznie jak dla Ciebie powyższe perlowe replace ...
A jednak sie jakos wykonuje chyba. Czyli moze python jest "madrzejszy" niz
sie wydaje? :-)
--
pozdro
R.e.m.e.K