from pexpect import pxssh
import getpass
try:
s = pxssh.pxssh()
hostname = "ip.ip.ip.ip"
username = "root"
password = "732he+?hs7"
s.login(hostname, username, password)
s.sendline('ll')
s.prompt()
print(s.before)
s.sendline('ls -l')
s.prompt()
print(s.before)
s.sendline('df')
s.prompt()
print(s.before)
s.logout()
except pxssh.ExceptionPxssh as e:
print("pxssh login hata.")
print(e)</code>
Yazılım Geliştirme. Otomasyon. Web & Mobil Yazılım Geliştirme. WebServis & RestApi Uygulamaları. Sunucu ve Network Otomasyon Yazılımları.
30 Aralık 2021 Perşembe
Python ile uzak makineye ssh bağlantısı yaparak komut çalıştırmak
29 Eylül 2021 Çarşamba
Python Class ve Metodları
Merhaba,
Basit bir örnek ile Python Class ve Class Metodlarının nasıl oluşturulduğunu görelim.
Alttaki örneğimizde Car isimli bir class oluşturacağız. Bu class ın içinde __init__ ile tanımlanan metod bu class üzerinden oluşturulacak her obje örneğini tanımlanan özellikler ile başlatacaktır. Yani oluşturulan her Car objesi doornum, color, motor ve model özellikleri ile başlatılacaktır. Bu özellikleri self.değişken şeklinde __init__ içinde tanımlıyoruz. Bu özellikler oluşturulan her Car objesinde farklı verilebilir. Sınıf özelliği ise oluşturulan her objede aynı olacaktır. Bunu ise type değişkeni ile sınıf içinde tanımlıyoruz.
class Car:
type = "Personal"
def __init__(self, doornum, color, motor, model):
self.doornum = doornum
self.color = color
self.motor = motor
self.model = model
Artık bir Car objesi oluşturabiliriz.
carx = Car(4,"white",1600,"Opel Astra")
Hatta oluşturulan carx objesinin özelliklerini ekrana bastırabiliriz.
print(carx.model)
print(carx.type)
Buraya kadar bir sınıfa özellik tanımlayarak obje oluşturmayı gördük. Peki bu objenin bazı aksiyonlar almasını istersen ne yapacağız ? Bu durumda metodlar devreye girer. Sınıf içinde tanımlanacak metodlar o sınıfa çeşitli aksiyon alma yeteneği katarlar. Alttaki şekilde ekleyebiliriz.
def printInfo(self):
print(f"Model is : {self.model} , Color is : {self.color}")
def radio(self, action):
'''
Radio Open/Close Codes
'''
print(f"{self.model} > Radio {action}")
İkincisi ise aracın radyosunu açar yada kapatır.
Tam bir örneklemeyle kodlarsak :
class Car:
type = "Personal"
def __init__(self, doornum, color, motor, model):
self.doornum = doornum
self.color = color
self.motor = motor
self.model = model
def printInfo(self):
print(f"Model is : {self.model} , Color is : {self.color}")
def radio(self, action):
'''
Radio Open/Close Codes
'''
print(f"{self.model} > Radio {action}")
carx = Car(4,"white",1600,"Opel Astra")
print(carx.model)
print(carx.type)
carx.printInfo()
carx.radio("OPEN")
print()
carm = Car(2,"red",2000,"Renault Clio")
print(carm.model)
print(carm.type)
carm.printInfo()
carm.radio("CLOSE")
Kodu çalıştırdığımızda çıktımız alttaki şekilde olacaktır.
Teşekkürler,
Cem Selmanoğulları
23 Eylül 2021 Perşembe
Xamarin Forms (C#) ile IOS&Android uygulamalarımız için LDAP entegrasyonu
Merhaba,
Bugün Xamarin Forms (C#) ile IOS&Android uygulamalarımız için LDAP entegrasyonu üzerine bir örnek paylaşmak istiyorum. Öncelikle ldap entegrasyonu için alttaki Nuget paketini yüklemeniz gerekiyor.
Novell.Directory.Ldap.NETStandard nuget paketi ile ldap otantikasyon ve ldap arama işlemlerini rahatlıkla yapabiliriz.
Öncelikle bir LdapConnection yaratıyoruz. (.Connect) ile url ve portu verilen ldap sunucusuna bağlanıyoruz. (.Bind) ile bağlantı üzerinden ldap üzerinde arama yapmaya yetkili bir kullanıcı ile otantikasyonu yapıyoruz. Sonrasında vereceğimiz Ldap SearchBase içinde belirlediğimiz attrs ("givenname", "cn" , "uid" , "mail" , "address") değerlerini getirecek şekilde aratmamızı yapıyoruz. Bağlantımızda Search i çağırdığımızda bunu LdapSearchResults olacak şekilde tanımlıyoruz. Sonrasında ise bu LdapSearchResults içinde gezinerek istediğimiz bilgileri ekrana bastırıyoruz.
void ldap_check() {
using (var cn = new LdapConnection())
{
cn.Connect("192.168.121.120", 389); //636 ssl
try
{
//cn.SecureSocketLayer = true;
cn.Bind("cn=admin,dc=localdomain,dc=local", "password");
Console.WriteLine(" ::: LDAP BAŞARILI ::: " + cn.ToString() + " ::: ");
string[] attrs = { "givenname", "cn" , "uid" , "mail" , "address"};
string SearchBase = "uid=selman,ou=People,dc=localdomain,dc=local";
LdapSearchResults lsc = (LdapSearchResults)cn.Search(SearchBase,
LdapConnection.ScopeBase , "(objectClass=*)", attrs, false);
while (lsc.HasMore())
{
LdapEntry nextEntry = null;
try
{
nextEntry = lsc.Next();
Console.WriteLine(">>> " + nextEntry.ToString());
}
catch (LdapException e)
{
throw e;
}
break;
}
}
catch (LdapException f)
{
Console.WriteLine(" LDAP HATA : " + f.ResultCode.ToString());
return;
}
catch (Exception f)
{
Console.WriteLine(" LDAP HATA : " + f.Message);
return;
}
}
}
Çıktımız alttaki gibi olacaktır :
::: LDAP BAŞARILI ::: Novell.Directory.Ldap.LdapConnection
LdapEntry: uid=selman,ou=People,dc=localdomain,dc=local;
LdapAttributeSet: LdapAttribute: {type='givenName', value='cem'}
LdapAttribute: {type='uid', value='selman'}
LdapAttribute: {type='cn', value='cemselman'}
LdapAttribute: {type='mail', value='cemmailselman@gmail.com'}
Thread finished: #11
Teşekkürler,
Cem Selmanoğulları
7 Eylül 2021 Salı
Django projesini varolan veritabanı ve tablolar ile birlikte çalıştırmak
Merhaba,
Yeni bir Django projesi oluşturdunuz. Veritabanını bağladınız fakat veritabanında birçok tablo var. Bu tabloları da kullanabilmek ve Django models.py dosyasına dahil etmek istiyorsunuz. İşte bu durumda python yönetim komutlarından inspectdb oldukça işimize yarıyor. Alttaki komutu çalıştırıp yeni bir models.py dosyası oluşturuyoruz. Bu dosya halihazırda veritabanında bulunan tablolar üzerinden oluşturuluyor. Sonrasında bu models.py dosyasını manuel olarak düzenleyip gerçek models.py dosyamıza taşıyoruz. Makemigration ve migrate işlemlerini yaparak işlemi tamamlıyoruz.
$ python manage.py inspectdb > models.py
Dilerseniz geçici models.py oluşturmadan direkt inspectdb analiz çıktısını ekrana da bastırabilirsiniz.
$ python manage.py inspectdb
Teşekkürler,
Cem Selmanoğulları
27 Ağustos 2021 Cuma
XAML view içinde Label tıklayarak aksiyon aldırma
Selamlar,
XAML sayfanız içine yerleştirdiğimiz bir Label text değerini tıklayarak değiştirmek için alttaki şekilde GestureRecognizer ekleyebiliriz. XXXXX yazan Label a tıkladığımızda Label değeri OOOOOOOO olarak değişecektir.
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:XCob"
x:Class="XCob.testpage3"
Title ="Expendable ListView "
BackgroundColor="Bisque">
<Grid x:Name="MainGrid2x4" AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1" BackgroundColor="Transparent" >
<Grid.RowDefinitions>
<RowDefinition Height="200" />
<RowDefinition Height="200" />
</Grid.RowDefinitions>
<BoxView x:Name="Box2241"/>
<Label x:Name="mylabel" Text="YYYY" TextColor="Black" HorizontalTextAlignment="Center" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" FontSize="Large">
<Label.GestureRecognizers>
<TapGestureRecognizer Tapped="OnLabelNameTapped" NumberOfTapsRequired="1" />
</Label.GestureRecognizers>
</Label>
<BoxView x:Name="Box2242" Grid.Row="1"/>
<Label x:Name="mylabel2" Grid.Row="1" Text="XXXXX" TextColor="Black" HorizontalTextAlignment="Center" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" FontSize="Large"/>
</Grid>
</ContentPage>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace XCob
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class testpage3 : ContentPage
{
public testpage3()
{
InitializeComponent();
}
void OnLabelNameTapped(object sender, EventArgs args)
{
labelcent.Text = "OOOOOOOO";
}
}
}
23 Ağustos 2021 Pazartesi
Xamarin.Forms içinde ekrandaki resme dokunarak aksiyon alma
Merhaba,
Mobil uygulamamızın ekranındaki resme tıkladığımızda bir aksiyon almak için alttaki kosları kullanıyoruz.
Xaml dosyamız içinde image eklerken TapGestureRecognizer tanımlıyoruz.
<AbsoluteLayout BackgroundColor="Transparent">
<Image AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1" Source="{local:ImageResource VFMob.IMG.mybanner.JPG}" Aspect="AspectFill">
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="OnImageNameTapped"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image>
</AbsoluteLayout>
Ayrıca C# dosyamız içinde ise alttaki şekilde resme dokunulduğunda oluşacak aksiyonu tanımlıyoruz.
void OnImageNameTapped(object sender, EventArgs args)
{
Console.WriteLine("TAPPED");
}
Resme tıklandığında konsola TAPPED basıldığını göreceksiniz.
Teşekkürler,
Cem Selmanoğulları
Xamarin.Forms Xaml dosyası içinde yuvarlak button oluşturulması
Merhaba,
Xaml dosyası içinde eklediğimiz köşeli buttonları yuvarlak hale getirebileceğimizi biliyor muydunuz ?
Burda tam yuvarlak olması için önemli nokta Width ve Height değerlerinin aynı olması. Radius değerinin ise bu değerlerin yarısı kadar olmasıdır. Alttaki örnek IOS ve Android için farklı boyutlarda button görüntüleyecek şekilde oluşturulmuştur.
<Button Clicked="NavigateButton_OnClicked" BorderColor="LightGray" BorderWidth="2" HorizontalOptions="Center" VerticalOptions="Center" ImageSource="{local:ImageResource Proj.IMG.picfile.JPG}">
<Button.WidthRequest>
<OnPlatform x:TypeArguments="x:Double">
<On Platform="iOS">120</On>
<On Platform="Android,Windows">140</On>
</OnPlatform>
</Button.WidthRequest>
<Button.HeightRequest>
<OnPlatform x:TypeArguments="x:Double">
<On Platform="iOS">120</On>
<On Platform="Android,Windows">140</On>
</OnPlatform>
</Button.HeightRequest>
<Button.BorderRadius>
<OnPlatform x:TypeArguments="x:Int32">
<On Platform="iOS">60</On>
<On Platform="Android,Windows">70</On>
</OnPlatform>
</Button.BorderRadius>
</Button>
Teşekkürler,
Cem Selmanoğulları
24 Temmuz 2021 Cumartesi
Xamarin.Forms ile ilk mobil uygulamamızı yazalım (Android/IOS)
Merhaba,
Xamarin.Forms ile ilk mobil uygulamamızı basitçe oluşturalım. VisualStudio 2019 ile yapacağımız uygulama için öncelikle yeni bir Xamarin.Forms C# projesi açıyoruz.
Solution explorer içinde Xamarin.Forms ana klasör yapısı ile birlikte Android ve IOS klasörlerinin de geldiğini göreceksiniz. Biz Xamarin.Forms ana klasörü ile ilgileneceğiz.
Projemizi test etmek için ise yine visual studio ile birlikte gelen emulatörden faydalanacağız.
Öncelikle MainPage.xaml dosyasını açıyoruz ve içine bir adet Button ekleyeceğiz.
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="Mob.MainPage">
<StackLayout>
<Label Text="Test Sayfası!"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
FontSize="Large"/>
<Button Text="Test Et" BackgroundColor="Red" BorderColor="Yellow" TextColor="White" FontSize="Large" Clicked="Test_Et" />
</StackLayout>
</ContentPage>
Sonrasında MainPage.xaml.cs dosyasını açarak alttaki kod bloğunu MainPage sınıfı içine ekleyeceğiz. Amacımız her button tıklamada kaç kere tıklandığını hesaplamak.
int count = 0;
void Test_Et(object sender, System.EventArgs e)
{
count++;
((Button)sender).Text = $"{count} defa test edildi.";
}
Son durumda MainPage.xaml.cs dosyamız alttaki şekli alıyor.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace Mob
{
[DesignTimeVisible(false)]
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
int count = 0;
void Test_Et(object sender, System.EventArgs e)
{
count++;
((Button)sender).Text = $"{count} defa test edildi.";
}
}
}
Emulatörümüzü çalıştırdığımızda ilk uygulamamız karşınızda. TEST ET butonuna her basışınızda kaç kere test eildiğini mobil ekranına basacaktır.