<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BulTux &#187; clipboard</title>
	<atom:link href="http://www.bultux.org/tag/clipboard/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bultux.org</link>
	<description>Български блог посветен на свободния софтуер и новото от Linux света</description>
	<lastBuildDate>Sat, 03 Dec 2011 08:18:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Python: Актуалната песен в Clipboard</title>
		<link>http://www.bultux.org/terminal/python-aktualna-pesen-w-clipboard</link>
		<comments>http://www.bultux.org/terminal/python-aktualna-pesen-w-clipboard#comments</comments>
		<pubDate>Wed, 28 Oct 2009 16:02:52 +0000</pubDate>
		<dc:creator>Владимир Колев</dc:creator>
				<category><![CDATA[Терминал]]></category>
		<category><![CDATA[clipboard]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[rhythmbox]]></category>

		<guid isPermaLink="false">http://bultux.sikomi.com/?p=38</guid>
		<description><![CDATA[<img src="http://bultux.org/wp-content/plugins/category-icons/cats/scripts.png" width="22" height="22" alt="" title="Терминал" /><br/>За този урок ще са ви необходими елементарни познания по програмиране с Python, и разбиране на командите в Linux терминала. Урокът може лесно да бъде пренаписан и на други езици: perl, bash, и т.н. Ето и какво ще прави нашият малък скрипт: Ще проверим дали плейърът, който използваме е включен След като е включен ще [...]]]></description>
			<content:encoded><![CDATA[<img src="http://bultux.org/wp-content/plugins/category-icons/cats/scripts.png" width="22" height="22" alt="" title="Терминал" /><br/><p style="text-align: justify;">За този урок ще са ви необходими елементарни познания по програмиране с Python, и разбиране на командите в Linux терминала. Урокът може лесно да бъде пренаписан и на други езици: perl, bash, и т.н. Ето и какво ще прави нашият малък скрипт:</p>
<ol style="text-align: justify;">
<li>Ще проверим дали плейърът, който използваме е включен</li>
<li>След като е включен ще използваме команда, която да изведе информация за свирещата в моемнта песен, и нашият скрипт ще я прочете</li>
<li>Скрипта ще форматира прочетената информация, за да я подреди във формата &#8220;Изпълнител &#8211; Заглавие&#8221;</li>
<li>След което ще използваме gtk библиотеката, за да копираме песента в clipboard</li>
<li>Ще разширим скрипта, за да издава приятени съобщения, когато е копирана песен</li>
</ol>
<p style="text-align: justify;">Преди да започнем ще трябва да се уверим, че системата ни е готова, т.е. че разполагаме с необходимите библиотеки. За целта са ни необходими:</p>
<ul style="text-align: justify;">
<li>python &gt;=2.5</li>
<li>python-notify</li>
<li>python-gtk2</li>
</ul>
<p style="text-align: justify;">След като сте инсталирали необходимите пакети е време да се захванем за работа:</p>
<p style="text-align: justify;"><span id="more-38"></span></p>
<h2 style="text-align: justify;">Скелет на скрипта:</h2>
<p style="text-align: justify;">Ще започнем със създаването на скелет за нашият скрипт, който в последствие ще разширим. Първоначално ще създадем метод <strong>cur_song()</strong>, който ще проверява и събира информация за свирещата песен. Причината да правиме това, е за да можем да използваме скрипта и в други наши програми. След което ще инициализираме метода и ще го изпълним при стартиране на програмата с<strong> if __name__ = &#8220;__main__&#8221;: </strong>, където ще инициализираме и метода за записване в clipboard-а.</p>


<div class="wp-geshi-highlight"><div class="python"><ol><li class="li1"><pre class="de1"><span class="co1">#!/usr/bin/env python</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="kw1">import</span> <span class="kw3">os</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="kw1">def</span> cur_song<span class="br0">&#40;</span><span class="br0">&#41;</span>:</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">	<span class="kw1">return</span> song</pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1"><span class="kw1">if</span> __name__ <span class="sy0">==</span> <span class="st0">&quot;__main__&quot;</span>:</pre></li><li class="li1"><pre class="de1">	<span class="kw1">import</span> pygtk</pre></li><li class="li1"><pre class="de1">	<span class="kw1">import</span> gtk</pre></li><li class="li1"><pre class="de1">	<span class="kw1">print</span> cur_song<span class="br0">&#40;</span><span class="br0">&#41;</span></pre></li></ol></div></div>


<p style="text-align: justify;">Така GTK ни предлага един много елементарен инструмент, който ще ни помогне за копиране на песента в Clipboard. За целта първо трябва да създадеме променилва clipboard, която да приеме метода за отваряне на clipboard, след което ще зададем променливата да приеме стойност от нашия метод cur_song(), и накрая ще запишеме промяната &#8211; три реда по-близко до целта ;) :</p>


<div class="wp-geshi-highlight"><div class="python"><pre class="de1">	clipboard <span class="sy0">=</span> gtk.<span class="me1">clipboard_get</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
	clipboard.<span class="me1">set_text</span><span class="br0">&#40;</span>cur_song<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
	clipboard.<span class="me1">store</span><span class="br0">&#40;</span><span class="br0">&#41;</span></pre></div></div>


<h2 style="text-align: justify;">Вземане на информацията от плейъра</h2>
<p style="text-align: justify;">За да вземем информацията от плейъра, първо трябва да определим, кой плейър ще използваме. Нека за примера вземем Rhythmbox, ще видите че метода е приложим и за други аудио плейъри като:  exaile, banschee, quodlibet, listen, mocp.</p>
<p style="text-align: justify;">Първо да разберем как всъщност функционира самия метод:</p>
<p style="text-align: justify;">1. Много добре знаем, че всяка стартирана програма създава процес и това кои процеси в работят в момента на компютъра можем да проверим с командата <strong>ps -A</strong>, и за да проверим за точно определена програма можем да използваме командатата <strong>grep &lt;име_на_програмата&gt;</strong>. Като резултат получаваме командния ред: ps -A | grep rhythmbox</p>
<p style="text-align: justify;">2. От нашият скрипт много лесно можем да добавим изпълнението на командата посредством метода exec, но така няма да можем да прочетем изхода от командата. За целта ще използваме библиотеката <strong>os</strong>, която съдържа и метода <strong>popen</strong>, с който да прочетем изхода от изпълнената команда.</p>
<p style="text-align: justify;">3. Към Rhythmbox има приложение с името<strong> rhythmbox-client,</strong> което ни предосравя достъп до Rhythmbox от командния ред. Добавяйки параметъра <strong>&#8211;print-playing </strong>получаваме точно това, което ни трябва &#8211; свирещата в момента песен.</p>
<p style="text-align: justify;">След като разполагаме с горните знания вече няма да ни бъде никак трудно да ги приложиме в нашия метод cur_song():</p>


<div class="wp-geshi-highlight"><div class="python"><pre class="de1">	<span class="co1"># Проверяваме дали rhythmbox е включен</span>
	<span class="kw1">if</span> <span class="st0">&quot;rhythmbox&quot;</span> <span class="kw1">in</span> <span class="kw3">os</span>.<span class="me1">popen</span><span class="br0">&#40;</span><span class="st0">'ps -A | grep rhythmbox'</span><span class="br0">&#41;</span>.<span class="kw3">readline</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:
		<span class="co1"># Прочитаме свирещата в момента песен и премахваме новия ред от изхода, за да получиме само един ред</span>
		song <span class="sy0">=</span> <span class="kw3">os</span>.<span class="me1">popen</span><span class="br0">&#40;</span><span class="st0">'rhythmbox-client --print-playing'</span><span class="br0">&#41;</span>.<span class="kw3">readline</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">replace</span><span class="br0">&#40;</span><span class="st0">'<span class="es0">\n</span>'</span><span class="sy0">,</span> <span class="st0">''</span><span class="br0">&#41;</span>
	<span class="kw1">else</span>:
		<span class="kw1">return</span> <span class="st0">&quot;No song playing&quot;</span>
	<span class="co1"># Тъй като това е метод - връщаме съдържанието на променливата</span>
	<span class="kw1">return</span> song</pre></div></div>


<p style="text-align: justify;">И това е като цяло скрипта в няколко реда. При изпълнението му няма да се случи абсолютно нищо &#8211; т.е. нищо няма да видите, но ако отворите текстов редактор и изберете опцията paste, ще получите свирещата песен в момета :)</p>
<h2 style="text-align: justify;">Разширяване на скрипта</h2>
<p style="text-align: justify;"><a href="http://bultux.org/wp-content/uploads/2009/10/playcopy.png" class="highslide-image" onclick="return hs.expand(this);"><img class="alignright size-full wp-image-39" title="playcopy" src="http://bultux.org/wp-content/uploads/2009/10/playcopy.png" alt="playcopy" width="300" height="100" /></a>За да разширим нашият скрипт и да знаеме, дали работи правилно ще използваме библиотеката notify, която ни предоставя възможност да пращаме съобщения до notify системата на Linux. Преди това обаче, ще си добавиме възможност да включваме и изключваме системата за известия &#8211; за целта ще създаден след дефинирането на библиотеките глобална променлива show_notifications = 1. И в зависимост от това, дали стойността е 0 или 1, ще определяме дали известяването е включено или изключено. Първо ще ви покажа кодовия блок, който добавяме към края на скрипта &#8211; след clipboard.store():</p>


<div class="wp-geshi-highlight"><div class="python"><pre class="de1"><span class="kw1">if</span> show_notifications <span class="sy0">==</span> <span class="nu0">1</span>:
		<span class="kw1">try</span>:
			<span class="kw1">import</span> pynotify
			<span class="kw1">if</span> pynotify.<span class="me1">init</span><span class="br0">&#40;</span><span class="st0">&quot;playCopy&quot;</span><span class="br0">&#41;</span>:
				n <span class="sy0">=</span> pynotify.<span class="me1">Notification</span><span class="br0">&#40;</span><span class="st0">&quot;playCopy&quot;</span><span class="sy0">,</span> <span class="st0">&quot;<span class="es0">\n</span>%s&quot;</span> % clipboard.<span class="me1">wait_for_text</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="st0">&quot;audio-volume-medium&quot;</span><span class="br0">&#41;</span>
				n.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span>
		<span class="kw1">except</span>:
			<span class="kw1">print</span> <span class="st0">&quot;You don't have pynotify installed!&quot;</span></pre></div></div>


<p style="text-align: justify;">Ето и какво се случва. Ако променливата ни show_notifications иа стойност 1, то тогава ще се опитаме да вмъкнеме библиотеката pynotify. Ако не е вмъкната, значи че не е инсталирана. След което следва условието pynotify.init(&#8220;playCopy&#8221;) &#8211; това е много важно, защото без него нашия скрипт няма да работи &#8211; това, което прави е да съобщи на notify, че нашия скрипт си има има playCopy, с което да го идентифицира. и след това взимаме съобщението, което последно нашият скрипт е записал в clipboard за да го покажеме n.show().</p>
<p style="text-align: justify;">Можете да изтеглите и пълния скрипт за програмата:</p>
<p style="text-align: center;"><img src="http://imgur.com/b0SVe.png" border="0" /><a href="http://www.bultux.org/wp-content/plugins/download-monitor/download.php?id=1" title="Изтеглен 120 пъти"><strong>PlayCopy Script</strong>  (33.37 KB)</a> 120 изтегляния</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bultux.org/terminal/python-aktualna-pesen-w-clipboard/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

