شما هنوز به سیستم وارد نشده اید.

#26 2016-10-13 13:52:23

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,281

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

خیلی میتونه کاربردی باشه. اما  استفاده از caseهای مشابه درحالیکه 3$ و 4$ بجای regular expressionهای 3$.* و 4$.* جایگزین شده باشن احتمالا نتایج شبیهی به دو حالت دیگه که مدّ نظرتون هست خواهد داد (cat filename | grep ...).

ویرایش: یک ایده شیک تر میتونه استفاده از روشی باشه که احسان در اینجا برای کنترل کردن تمام پسوندها انجام داده؛ یعنی ساختن آرایه ای از پسوندها (بهرحال، حتی در غیر اینصورت، ایده استفاده از xargs مفیدتر به نظر میرسه).

آخرین ویرایش توسط Arcush (2016-10-13 14:28:55)

آفلاین

#27 2016-10-26 17:27:12

pharbod
عضو
از : /
ثبت شده: 2016-08-31
ارسال ها: 50
وب سایت

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

آیا از دسکتاپ ثابت خود خسته شده اید؟ خب دیگر خسته نشوید لطفا big_smile

یه اسکریپت باحال که دل و جگرش به فضاپیمای آب و هوا شناسی Himawari 8 وصله و توی هر ۱۰ دقیقه به صورت زنده عکسی از زمین روی دسکتاپتون ست میکنه.

و البته که این اسکریپت مال من نیست big_smile

https://github.com/boramalper/himawaripy

آفلاین

#28 2016-11-17 13:12:32

mazhar
عضو
ثبت شده: 2016-08-01
ارسال ها: 227

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

میزکار kde-plasma رو تازگی نصب کردم و خیلی تحت تاثیر قرار گرفتم اما وقتی مساله به استفاده از دو مونیتور می رسه kde اصلا روی خوش نشون نمیده hmm پنل متوقف می شد و گاهی هم کل دسکتاپ کرش می کرد. بعد یه مدت امتحان روش های مختلف به روش زیر رسیدم که امیدوارم اگر این مشکل رو دارید با kde براتون مفید باشه:

   #!/bin/bash
   xrandr --output currentMonitor --primary
   xrandr --output secondMonitor --right-of currentMonitor
   killall plasmashel
   /bin/plasmashell & disown

ابتدا مانیتور فعلی رو به عنوان پیشفرض ست میکنه بعد دومی رو میذاره سمت راس اولی و بعد پلاسما رو میبنده و سپس دوباره استارتش میکنه.
برای لپ تاپ هایی که رزولوشن صفحه بعد بوت به درستی ست نمیشه (به دلایل مختلف) هم این روش جواب میده:

ابتدا یه اسکریپت برای رزولوشن میسازید که هربار تو بوت باید استارتش کنید:

/bin/kde_resolution.sh
#!/bin/bash
xrandr --newmode "3840x2160_60.00"  712.75  3840 4160 4576 5312  2160 2163 2168 2237 -hsync +vsync
xrandr --addmode monitorName 3840x2160_60.00
xrandr --output monitorName --mode 3840x2160_60.00

توجه کنید که دستور اول رو باید با استفاده از این صفحه بدست بیارید.

و برای استفاده از دو مونیتور میتونید از این استفاده کنید:

   #!/bin/bash
   xrandr --output currentMonitor --primary
   /bin/kde_resolution.sh
   xrandr --output secondMonitor --right-of currentMonitor
   killall plasmashel
   /bin/plasmashell & disown

big_smile

آخرین ویرایش توسط mazhar (2016-11-17 13:14:53)

آفلاین

#29 2016-11-17 18:26:12

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 729
وب سایت

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

مظهر جان یه سوال خارج از بحث.
kde رو من تا حالا نصب نکردم.چون هر سری میخواستم نصب کنم دوستای kde دارمون میگفتن که هنوز ناپایداره و باگ های بد عنقی داره!
آیا هم چنان این روال درسته یا نه میشه به عنوان کار روزمره ازش استفاده کرد؟


"Enough!!!Don't Use "DEFAULTS" Any More..."make it simple stupid

آفلاین

#30 2016-11-17 19:31:06

mazhar
عضو
ثبت شده: 2016-08-01
ارسال ها: 227

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

سلام و عرض ادب
راستش یه بار نصب کرده بودم و ازش اصلا راضی نبودم چون واقعا جوابگو نبود (سیستم ضعیفی داشتم). ولی دقیقاً دو هفته پیش آوردم رو لپ تاپم تست کنم و به طرز غیر قابل قبولی شگفت زده شدم! فقط نصب کنید و لذت ببرید big_smile همین امروز هم که از dual display باگ داشت و حل شد. به غیر از این مورد تا حالا هیچ موردی نداشتم باهاش smile

آفلاین

#31 2016-11-17 19:41:57

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 729
وب سایت

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

سپاس از راهنمایی تون مظهر عزیز smile


"Enough!!!Don't Use "DEFAULTS" Any More..."make it simple stupid

آفلاین

#32 2016-11-17 20:51:56

mazhar
عضو
ثبت شده: 2016-08-01
ارسال ها: 227

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

مخلصیم smile

آفلاین

#33 2016-12-31 10:35:08

mazhar
عضو
ثبت شده: 2016-08-01
ارسال ها: 227

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

با توجه به اینکه بسیاری از برنامه هایی که کار های حرفه ای انجام میدن مقدار بسیار زیاد Ram رو به خودشون اختصاص میدن گاهی مواقع ممکنه باعث کرش شدن سیستم بشن، مثلا همین کد cpp:

#include <iostream>
using namespace std;

int main()
{
	int n = 20;
	char *pch;
	while (1)
	{
		pch = new char[n];
	}
	return 0;
}

که اگر در یک سیستم لینوکسی کامپایل و اجرا شود، رم را پر کرده و باعث هنگ کردن سیستم می شود.
راه حلی که پیدا کردم timeout بود:
این اسکریپت به perl 5 نیاز دارد. برای استفاده به عنوان محدود کننده ی رم، اسکریپت را اینگونه فراخوانی کنید:

./timeout -m <ram_amount> <command>

که amount_ram حد اکثر مقدار رمی است که به این command اختصاص داده می شود. در ضمن command می تواند هر برنامه یا حتی دستور شل باشد.

آخرین ویرایش توسط mazhar (2016-12-31 10:36:31)

آفلاین

#34 2017-01-09 11:12:47

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

سلام، من اخیرا برای پشتیبانی توی يه ISP رزومه فرستاده بودم، یکی از اولین شرایطش این بود که سوالات بخش "سوالات متداول" شون رو بخونیم و بلد باشیم، اکثر هم گروهیام ویندوزی بودند و با دیدن این که این کار چه قدر میتونه زمانبر باشه، قید این سوالا رو زدن، (برای دیدن هر سوال بایستی یه page جدید باز شه و ادامهی کار) من که قبلا یکم تجربه وب اسکرپینگ با پایتون رو داشتم، به سرم زد که یه کار باحال بکنم، حدود دو ساعت وقتمو گرفت، ولی حسی که بعدش داشتم کاملا وقتمو جبران کرد:


#!/usr/bin/env python3.5
# Author: Ehsan Faalpoor <faalpoor.ehsan@gmail.com>
import requests
import bs4
import os

URL = "http://www.asiatech.ir/"

def getTopLayerPage(main_url):
    modifiedURL = main_url + '/faq'
    page = requests.get(main_url + '/faq')
    soup = bs4.BeautifulSoup(page.text, "html.parser")
    Table = soup.find('table', {'style': 'width: 100%;', 'cellspacing': '1', 'cellpadding': '5' ,'border': '0', 'align': 'center'})
    for Header in Table.findAll('a', {'href': True}):
        yield '{}{}'.format(URL, Header['href']) , Header.string    

def howManyPages(HeaderURl):
    page = requests.get(HeaderURl)
    soup =bs4.BeautifulSoup(page.text, 'html.parser')
    subPages = soup.find('div', {'class': 'pagination'})
    if not subPages.find('a'):
        yield '{}'.format(HeaderURl)
    else:
        for subPage in subPages.findAll('a', {'href': True}):
           yield '{}{}'.format(URL, subPage['href'])
        yield '{}'.format(HeaderURl)        

def crawlTheCategory(listOfPage,Title):
    currentPath = os.getcwd()
    with open(currentPath + '/{}.Question'.format(Title), 'w') as fd:
        fd.write(Title + '\n')
        QuestionCounter = 1
        for pageNumber in listOfPage:
            page = requests.get(pageNumber)
            soup = bs4.BeautifulSoup(page.text, 'html.parser')            
            for QuestionDiv in soup.findAll('h3', {'class': 'mypets1'}):
                QuestionLink = URL + QuestionDiv.find('a')['href']
                QuestionPage = requests.get(QuestionLink)
                Qsoup = bs4.BeautifulSoup(QuestionPage.text, 'html.parser')
                fd.write(str(QuestionCounter) + '- ' + Qsoup.find('h1', {'class': 'titlepage'}).string + '\n')
                Context = Qsoup.find('div', {'class': 'col-md-12 col-sm-12 col-xs-12'}).find('p').text
                fd.write(Context + '\n')
                fd.write('\n')
                QuestionCounter += 1           
    
def main():
    for pageURL, Title in getTopLayerPage(URL):
        subPage = {sb for sb in howManyPages(pageURL)}
        crawlTheCategory(sorted(subPage), Title)              

if __name__ == '__main__':
    main()

الان بسته به تعداد دسته بندی هایی که برای سوالاشون دارن ما یه سری تکست داریم، که از اینجا به بعد میدیمش به لیبرهآفیس.

(بعضی از دسته بندی ها بیشتر از یه صفحه سوال داشتند و تقریبا دو یا سه تا از سوالات هم مثله بقیه از تگ p برای متن استفاده نکرده بودن که اونا رو ناچارا دستی درست کردم)

این هم فایل نهایی.

آخرین ویرایش توسط ehsan_faal (2017-01-09 11:17:15)


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#35 2017-01-22 15:00:05

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

یه اسکریپت واسه تنبل ها:( من جمله خودم)
من اهل فیلمم، کتاب الکترونیکی هم زیاد میخونم، دوست دارم همشون همیشه دم دست باشن، بهترین راه حل واسه من درست کردن لینک به اون فایلهاست.
اما خب یکم دردسر داره که شما باید مسیر کامل فایل رو واسه درست کردن لینک رو بدی همیشه، فایلتون رو به این اسکریپت پاس میدید، توی دسکتاپتون یه فلدر به اسم شرتکات میسازه و اون فایل رو لینک میکنه به اونجا، هر سری هم چک میکنه که اگه لینک مرده ای اونجا باشه حذفش کنه.


#!/usr/bin/env python3

import os
import sys
import getpass
from subprocess import call

def main():
    realpath = os.path.abspath(sys.argv[1])
    user = getpass.getuser()
    destination = '/home/{}/Desktop/shortcuts/'.format(user)
    
    if not os.path.exists(destination):
        os.mkdir(destination)
    
    call(['find', destination, '-xtype', 'l', '-delete'])
    target = '{}{}'.format(destination, sys.argv[1])
    if not os.path.exists(target):
        returnCode = call(['ln', '-s', realpath, target])
        if returnCode == 0:
            print('The Operation was successful.')
        else:
            print("There's something wrong during operation. Error Code: {}".format(returnCode))
    else:
        sys.exit("There's a file with the same name as input in the destination folder. Making soft link is skipped.")


if __name__ == '__main__':
    if len(sys.argv) == 2:
        main()

آخرین ویرایش توسط ehsan_faal (2017-01-22 15:03:16)


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#36 2017-02-05 17:18:00

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

بدست آوردن اطلاعاتی راجع به لینک دانلود( مشابه کاری که اسپایدر میکنه)

شما میتونین به این اسکریپت یه لینک دانلود یا یه فایل حاوی لینکهای دانلود پاس بدید تا بهتون سایز هر لینک و نوع دیتا و نامش رو بده.
اسپایدر wget هم همینکارو میکنه منتها من نیاز داشتم یکم اطلاعات مختصرتر و ترتمیز تری داشته باشم.

#!/usr/bin/env python3.6

import os
import sys
import requests
import prettytable


def smartSize(nOctet):
    if nOctet is None:
        return None
    else:
        nOctet = int(nOctet)
        nKiB = nOctet / 1024
        if nKiB <= 1023:
            return nKiB, 'KiB'
        else:
            nMiB = nKiB / 1024
            if nMiB <= 1023:
                return nMiB, 'MiB'
            else:
                nGiB = nMiB / 1024
                return nGiB, 'GiB'


def inputIsFile():
    with open(sys.argv[1], 'r') as links:
        tabularData = prettytable.PrettyTable(
            ['File Name', 'File Type', 'File Size'])
        for link in links:
            response = requests.head(link.rstrip())
            if response.reason != 'OK':
                continue
            name = requests.utils.unquote(link).split('/')[-1]
            size = smartSize(response.headers.get('Content-Length', None))
            fileType = response.headers.get('Content-Type', None)
            if size is not None or fileType.startswith('text/html'):
                tabularData.add_row(
                    [name, fileType, '{:.3f} {}'.format(size[0], size[1])])
            else:
                if fileType.startswith('text/html'):
                    continue
                tabularData.add_row([name, fileType, size])
        print(tabularData)


def singleURL():
    response = requests.head(sys.argv[1])
    if response.reason != 'OK':
        sys.exit('There\'s something wrong with your URL, Got {}'.format(
            response.status_code))
    name = requests.utils.unquote(sys.argv[1]).split('/')[-1]
    size = smartSize(response.headers.get('Content-Length', None))
    filetype = response.headers.get('Content-Type', None)
    if size is not None:
        print('\nFile Name: {}\nFile Type: {}\nFile Size: {:.3f} {}'.format(
            name, filetype, size[0], size[1]))
    else:
        if filetype.startswith('text/html'):
            sys.exit('The remote File doesn\'t exist.')
        print('\nFile Name: {}\nFile Type: {}\nFile Size: {}'.format(
            name, filetype, size))


def main():
    if os.path.isfile(sys.argv[1]):
        inputIsFile()
    else:
        singleURL()

if __name__ == '__main__':
    if len(sys.argv) != 2:
        sys.exit('''1 argument is needed, you passed {}.
        You should pass this script a downloadable link or a file consist of downloadable links.'''.format(len(sys.argv) - 1))
    else:
        main()

نتیجه ی اجرا روی یه فایل حاوی لینکهای دانلود سریال BBT:

+----------------------------------------------------------+--------------------------+-------------+
|                        File Name                         |        File Type         |  File Size  |
+----------------------------------------------------------+--------------------------+-------------+
| The Big Bang Theory S10E01 1080p HDTV x265_AVADL.BiZ.mkv | application/octet-stream | 320.708 MiB |
|                                                          |                          |             |
| The Big Bang Theory S10E02 1080p HDTV x265_AVADL.BiZ.mkv | application/octet-stream | 266.059 MiB |
|                                                          |                          |             |
| The Big Bang Theory S10E03 1080p HDTV x265_AVADL.BiZ.mkv | application/octet-stream | 235.355 MiB |
|                                                          |                          |             |
| The Big Bang Theory S10E04 1080p HDTV x265_AVADL.BiZ.mkv | application/octet-stream | 256.318 MiB |
|                                                          |                          |             |
| The Big Bang Theory S10E05 1080p HDTV x265_AVADL.BiZ.mkv | application/octet-stream | 229.315 MiB |
|                                                          |                          |             |
| The Big Bang Theory S10E06 1080p HDTV x265_AVADL.BiZ.mkv | application/octet-stream | 303.587 MiB |
|                                                          |                          |             |
| The Big Bang Theory S10E07 1080p HDTV x265_AVADL.BiZ.mkv | application/octet-stream | 309.226 MiB |
|                                                          |                          |             |
| The Big Bang Theory S10E08 1080p HDTV x265_AVADL.BiZ.mkv | application/octet-stream | 247.850 MiB |
|                                                          |                          |             |
| The Big Bang Theory S10E09 1080p HDTV x265_AVADL.BiZ.mkv | application/octet-stream | 270.729 MiB |
|                                                          |                          |             |
| The Big Bang Theory S10E10 1080p HDTV x265_AVADL.BiZ.mkv | application/octet-stream | 385.516 MiB |
|                                                          |                          |             |
| The Big Bang Theory S10E11 1080p HDTV x265_AVADL.BiZ.mkv | application/octet-stream | 302.050 MiB |
|                                                          |                          |             |
+----------------------------------------------------------+--------------------------+-------------+

آخرین ویرایش توسط ehsan_faal (2017-02-05 17:20:29)


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#37 2017-02-06 13:57:35

grayneo
عضو
ثبت شده: 2016-11-22
ارسال ها: 4

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

با سلام یه اسکریپت برای خارج کردن فایل ها از حالت فشرده نوشتم به دلیل اینکه خیلی دیگه مرسوم شده فایل های سایت ها به صورت فشرده باشند و به همراه پسوورد
این اسکریپت سه فرمت فایل zip , 7z ,rar را از حالت فشرده خارج می کنه که  فایل هایی که فرمت rar دارند را در  دوحالت فایل بدون پسوورد و با پسوورد در نظر گرفتم, همچنین پس از اتمام کار extract کردن هر فایل آن را پاک می کنه
بسته های پیش نیاز هم شامل :
p7zip ,  unrar , unzip

#!/bin/bash
IFS=$'\n'
ls -1 *.rar > /tmp/lsrar.txt
ls -1 *.zip > /tmp/lszip.txt
ls -1 *.7z* > /tmp/ls7z.txt
clear
##
rarpass(){
name=$1
while read line; do
        name=$line
            
        unrar x -o+ -p$pass $name
        rm  $name
             done < /tmp/lsrar.txt
}
##
rar () {
name=$1
while read line; do
        name=$line
            
        unrar x -o+ $name
        rm   $name
             done < /tmp/lsrar.txt
}
###
rarfile (){

read -p "have files password?(y/n): " ans 
if [ $ans == "y" ] ;then
read -p "enter the password: " pass
rarpass
elif [ $ans == "n" ];then
rar
else 
 exit
fi
}
###
7zfile (){
name=$1
while read line; do
        name=$line
            
        7za x $name && rm  $name
             done < /tmp/ls7z.txt
}
##

zipfile (){

name=$1
while read line; do
        name=$line
        unzip  $name 
        rm  $name
             done < /tmp/lszip.txt
}
##
tmpclean (){
 rm /tmp/ls*.txt
}

read -p "choose your file formant enter like this (7z or zip or rar): " format
if [ $format == "rar" ] ;then
    rarfile
    tmpclean
elif [ $format == "zip" ];then
    zipfile
    tmpclean
elif [ $format == "7z" ];then
    7zfile
    tmpclean
else
 tmpclean
 exit
fi

Friends help friends use Gnu/Linux

آفلاین

#38 2017-02-06 15:14:21

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

بسته ی unp رو نصب کنید

آخرین ویرایش توسط ehsan_faal (2017-02-06 15:14:35)


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#39 2017-02-26 14:08:21

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

اسکریپت زیر واسه خودم که خیلی خیلی کاربردیه، tile کردن پنجرهها خیلی وقتا جوابگوی نیاز من نیست و روی xubuntu هم چیزی مثله gTile پیدا نکردم، اینو نوشتم، چندتا شرتکات هم براش ست کنید و خیلی راحت مدیریت کنید چینش پنجره هاتون رو، خوبیش اینه که با چندتا دستور ساده اینکار انجام شده و میتونید برحسب نیازتون تغییرش بدید.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""

import subprocess
import sys
#import os

def screenResolution():
    CMD = ['xrandr']
    CMD2 = ['grep', '\*']
    P1 = subprocess.Popen(CMD, stdout=subprocess.PIPE)
    P2 = subprocess.Popen(CMD2, stdin=P1.stdout, stdout=subprocess.PIPE)
    P1.stdout.close()
 
    ResolutionString, Junk = P2.communicate()
    Resolution = ResolutionString.split()[0]
    Width, Height = Resolution.decode().split('x')   
    return int(Width), int(Height)
    
    
def getCoordiantes():
    CMD = ["xdotool", "getactivewindow", "getwindowgeometry", "--shell"]
    result = subprocess.Popen(CMD, stdout=subprocess.PIPE)
    for line in result.stdout:
        yield int(line.decode().strip().split('=')[-1])
        
def moveWindow(X, Y, Width, Height):
    Sw, Sh = screenResolution()

    direction = sys.argv[1].lower()
    print(direction)
    if direction == 'top-right' or direction == 'tr' :
        Xnew = Sw - Width
        Ynew = 0
        subprocess.call(['xdotool','getactivewindow' , 'windowmove', str(Xnew), str(Ynew)])
        
    elif direction == 'top-left' or direction == 'tl':
        Xnew = 0
        Ynew = 0
        subprocess.call(['xdotool','getactivewindow' , 'windowmove', str(Xnew), str(Ynew)])

    elif direction == 'bottom-left' or direction == 'bl':
        Xnew = 0
        Ynew = Sh - Height
        subprocess.call(['xdotool','getactivewindow' , 'windowmove', str(Xnew), str(Ynew)])
    elif direction == 'bottom-right' or direction == 'br':
        Xnew = Sw - Width
        Ynew = Sh - Height
        subprocess.call(['xdotool','getactivewindow' , 'windowmove', str(Xnew), str(Ynew)])
    elif direction == 'center' or direction == 'cr':
        Xnew = (Sw - Width)//2
        Ynew = (Sh - Height)//2
        subprocess.call(['xdotool','getactivewindow' , 'windowmove', str(Xnew), str(Ynew)])
    elif direction == 'vertical-right' or direction == 'vr':
        Xnew = Sw*2//3
        Ynew = 0
        subprocess.call(['xdotool','getactivewindow' , 'windowsize', '33%', '100%'])
        subprocess.call(['xdotool','getactivewindow' , 'windowmove', str(Xnew), str(Ynew)])
    elif direction == 'vertical-middle' or direction == 'vm':
        Xnew = Sw//3
        Ynew = 0
        subprocess.call(['xdotool','getactivewindow' , 'windowsize', '33%', '100%'])
        subprocess.call(['xdotool','getactivewindow' , 'windowmove', str(Xnew), str(Ynew)])
    elif direction == 'vertical-left' or direction == 'vl':
        Xnew = 0
        Ynew = 0
        subprocess.call(['xdotool','getactivewindow' , 'windowsize', '33%', '100%'])
        subprocess.call(['xdotool','getactivewindow' , 'windowmove', str(Xnew), str(Ynew)])

    elif direction == 'horizontal-top' or direction == 'ht':
        Xnew = 0
        Ynew = 0
        subprocess.call(['xdotool','getactivewindow' , 'windowsize', '100%', '33%'])
        subprocess.call(['xdotool','getactivewindow' , 'windowmove', str(Xnew), str(Ynew)])
    elif direction == 'horizontal-middle' or direction == 'hm':
        Xnew = 0
        Ynew = Sh//3
        subprocess.call(['xdotool','getactivewindow' , 'windowsize', '100%', '33%'])
        subprocess.call(['xdotool','getactivewindow' , 'windowmove', str(Xnew), str(Ynew)])
    elif direction == 'horizontal-bottom' or direction == 'hb':
        Xnew = 0
        Ynew = Sh*2//3
        subprocess.call(['xdotool','getactivewindow' , 'windowsize', '100%', '33%'])
        subprocess.call(['xdotool','getactivewindow' , 'windowmove', str(Xnew), str(Ynew)])        
        
    else:
        sys.exit('''You should Choose a Right Position like:
            tr for Top-Right
            tl for Top-Left
            br for Bottom-Right
            bl for Bottom-Left
            vr for Vertical-Right
            vm for Vertical-Middle
            vl for Vertical-Left
            ht for Horizontal-Top
            hm for Horizontal-Middle
            hb for Horizontal-Bottom''')

def main():
    _, X, Y, Width, Height, _ = (getCoordiantes())
    moveWindow(X, Y, Width, Height)
 
 
 

if __name__ == '__main__':
    if len(sys.argv) == 2:
        main()
    else:
        sys.exit('You should Choose an option for this script like:\ntr for Top-Right\ntl for Top-Left\nbr for Bottom-Right\nbl for Bottom-Left.')

Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#40 2017-03-11 07:55:16

ehsan_faal
عضو
از : تهران
ثبت شده: 2015-10-02
ارسال ها: 270

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

سلام به همهی دوستان.
من امروز متوجه شدم که ایده ی اسکریپتی مثله fingil که دوست عزیزی مثله آقای امیرصمیمی و بر و بچه های لینوکس و من کار کردن روش چقدر میتونه مفید باشه.
متاسفانه اسکریپت آقای امیرصمیمی برای من کار نکرد.
ولی خب به من این ایده رو داد که خودم بنویسمش.
با پایتون نوشتم این اسکریپتو و خودم که فوق العاده راضیم.
شدیدا توصیه میکنم دوستانی که با پایتون مینویسن اسکریپت هاشونو از argparse استفاده کنن تا اگه منتشرش کردن بقیه هم بدونن چی به چیه.
یه حالت معمولی برای اسکریپت در نظر گرفته شده و یه حالت case insensitive که برای حالت دوم فقط کافیه از اسکریپت با فلگ i استفاده کنید.
خودش تشخیص میده که میخواید از انگلیسی به فارسی تبدیل کنید یا بالعکس.
سرچ های زیادی کردم و به این نتیجه رسیدم که بهترین کار استفاده از xsel توی پایتونه و اینکه متنی که میخواد تبدیل بشه رو حتما کپی کنید، انتخاب متن به تنهایی زیاد جالب جواب نمیداد.

#!/usr/bin/env python3.5
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 10 17:17:49 2017

@author: ehsun
"""

import subprocess
import argparse
import sys
import os

englishLetters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~', '"', ' ']
persianLetters = ['ش', 'ذ', 'ز', 'ی', 'ث', 'ب', 'ل', 'ا', 'ه', 'ت', 'ن', 'م', 'پ', 'د', 'خ', 'ح', 'ض', 'ق', 'س', 'ف', 'ع', 'ر', 'ص', 'ط', 'غ', 'ظ', 'ؤ', '\u200c', 'ژ', 'ي', 'ٍ', 'إ', 'أ', 'آ', 'ّ', 'ة', '»', '«', 'ء', 'ٔ', ']', '[', 'ْ', 'ً', 'ئ', 'ُ', 'َ', 'ٰ', 'ٌ', 'ٓ', 'ِ', 'ك', '۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹', '!', '"', '#', '$', '%', '،', 'گ', '(', ')', '*', '+', 'و', '-', '.', '/', ':', 'ک', '>', '=', '<', '؟', '٬', 'ج', '\\', 'چ', '×', 'ـ', '\u200d', '}', '|', '{', '÷', '؛', ' ']
length = len(persianLetters)
IgnoreCase = False
isMixture = False

def paste(src, p=True, c=True):
    if p:
        p = subprocess.Popen(['xsel', '-pi'], stdin=subprocess.PIPE)
        p.communicate(input=src)
    if c:
        p = subprocess.Popen(['xsel', '-bi'], stdin=subprocess.PIPE)
        p.communicate(input=src)

def isEnglish(src):
    return all(ord(c) < 128 for c in src)
    
def english2Persian(src):
    if IgnoreCase:    
        output = src.lower()
    else:
        output = src
    for i in range(length):
        target = englishLetters[i]
        if output.find(target) == -1 :
            continue
        output = output.replace(target, persianLetters[i])
     
    paste(output.encode())
        

def persian2English(src):
    output = src
    for i in range(length):
        target = persianLetters[i]
        if output.find(target) == -1 :
            continue
        output = output.replace(target, englishLetters[i])

    paste(output.encode())

def mixtureTranslate(src):
    
    srcLength = len(src)
    engDict = dict([(a,b) for a,b in enumerate(src) if ord(b) < 128])
    perDict = dict((i,src[i]) for i in range(srcLength) if i not in engDict)
    
    output = [' ']*srcLength
    
    for k,v in engDict.items():
        whichLetter = englishLetters.index(v)
        output[k] = persianLetters[whichLetter]
    
    for k,v in perDict.items():
        whichLetter = persianLetters.index(v)
        output[k] = englishLetters[whichLetter]
    
    result = ''.join(output)
    paste(result.encode())

def translate(src):
    if isMixture :
        mixtureTranslate(src)
    else:
        if isEnglish(src):
            english2Persian(src)
        else:
            persian2English(src)

def getSelection():
    
    selection = subprocess.check_output(["xsel", "-b"], universal_newlines = True).strip()
    isEmpty = len(selection)
    if isEmpty == 0:
        return
    else:        
        translate(selection)
    

def checkXselExistance():
    try:
        subprocess.call("xsel")
    except OSError as e:
        if e.errno == os.errno.ENOENT:
            # handle file not found error.
            sys.exit("xsel binary is not founded.")
        else:
            # Something else went wrong while trying to run `wget`
            sys.exit("There's something wrong while trying to access xsel.")

def main():
    global IgnoreCase
    global isMixture
    parser = argparse.ArgumentParser(description = '''This script will translate you'r mistyped string
    from persian to english and vice versa.''',
    epilog = 'Author: Ehsan Faalpoor <faalpoor.ehsan@gmail.com> <+98 903 348 66 02>', formatter_class = argparse.RawTextHelpFormatter)
    parser.add_argument('-i', '--ignoreCase', help = 'case-insensitive mode while converting from english to persian.', action = 'store_true', default = False)
    parser.add_argument('-m', '--mix', help = 'use this flag when you\'r input is a mixture of persian and english letters. it\'ll figure it out how to deal with it :)', action = 'store_true', default = False)
    
    
    args = parser.parse_args()
    checkXselExistance()
    IgnoreCase = args.ignoreCase
    isMixture = args.mix
    
    getSelection()
    
if __name__ == '__main__':
    
    main()

و یه هلپ کوچولو که خود اسکریپت بهتون میده:

➜  ~ fingil -h                      
usage: fingil [-h] [-i] [-m]

This script will translate you'r mistyped string
    from persian to english and vice versa.

optional arguments:
  -h, --help        show this help message and exit
  -i, --ignoreCase  case-insensitive mode while converting from english to persian.
  -m, --mix         use this flag when you'r input is a mixture of persian and english letters. it'll figure it out how to deal with it :)

Author: Ehsan Faalpoor <faalpoor.ehsan@gmail.com> <+98 903 348 66 02>

یه اپدیت کوچولو برای این اسکریپت نوشتم که الان اگه نوشتههاتون میکس هم باشند توسط این اسکریپت هندل میشن، مثه زمانی که میخواید یه متنی بنویسید که یکمش فارسی و یکمش انگلیسیه. برای این حالت فلگ m- رو گذاشتم و تک به تک کاراکتر ها چک میشن توی این حالت و به معادل خودشون توی اون یکی زبون نگاشت میشن.

به نظر خودم که چیز باحالی از آب دراومد

آخرین ویرایش توسط ehsan_faal (2017-03-14 11:51:50)


Mahatma Gandhi - The weak can never forgive. Forgiveness is the attribute of the strong

آفلاین

#41 2017-04-14 14:42:52

mazhar
عضو
ثبت شده: 2016-08-01
ارسال ها: 227

پاسخ: اسکریپتهای خودتون رو اینجا پست کنید

مخصوص window manager standalone ها. اسکریپت و راه حل برای کنترل نور صفحه کلید لپتاپ:
دایرکتوری زیر حاوی فایل هایی realtime هستش که با تغییرشون LED های دستگاه کنترل میشن.

/sys/class/leds

که در مورد من این فایل مربوط به نور کیبورد بود:

/sys/class/leds/asus::kbd_backlight

میشه با دستور زیر نور کیبورد رو عوض کرد، بین اعداد ۰ ۱ ۲ ۳ مشخصا ۰ برای خاموش و ۱ ۲ ۳ هم برای سطوح نور، واضحه که هم دایرکتوری هم فایل و هم سطوح نور تفاوت هایی داره در دستگاه های دیگه.

# echo 1 > /sys/class/leds/asus::kbd_backlight

همونطور که دیدید دسترسی روت لازمه.
اومدم و اسکریپت زیر رو نوشتم که بین این حالات سویچ بشه کرد:

/bin/kbled
--------------------------------
#!/bin/bash
action=$1
value=`cat /sys/class/leds/asus::kbd_backlight/brightness`
if [ "$action" == "increase" ]
then
        if [ "$value" -lt "3" ]
        then
                value=$((value+1))
                echo "$value" > /sys/class/leds/asus::kbd_backlight/brightness
        fi
fi
if [ "$action" == "decrease" ]
then
        if [ "$value" -gt "0" ]
        then
                value=$((value-1))
                echo "$value" > /sys/class/leds/asus::kbd_backlight/brightness
        fi
fi

ولی مشکل این بود که با دسترسی روت باید اجرا میشد. پس دسترسی اجرا بهش دادم، SUID رو برای فایل ست کردم و صاحب فایل رو به روت تغییر دادم:

chmod 755 /bin/kbled
sudo chmod +s /bin/kbled
sudo chown root /bin/kbled

سپس اجازه ی اجرای بدون پسورد رو به visudo دادم:

mazhar ALL=(root) NOPASSWD: /bin/kbled

و در نهایت key binding رو ست کردم برای sxhkd (برای مدیر پنجره ی bspwm):

XF86KbdBrightnessUp
        sudo kbled increase
XF86KbdBrightnessDown
        sudo kbled decrease

الان همه چی خوبه، شاد و خوشحال smile

آخرین ویرایش توسط mazhar (2017-04-14 14:45:19)

آفلاین

پانوشت انجمن

پشتیبانی توسط تیم آرچ لینوکس ایران و نیرو گرفته با FluxBB