her 10 saniyede bir calıstırma ?

Başlatan Mx0Ub, 25 Haziran 2011 - 01:34:03

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

Mx0Ub

while ile yapıcaz ancak ufak bir örnek birde ufaktan mantını yazabilirmisiniz ? teşekkürler
Not:
Hic bi sorumluluk kabul edilmez yapılan yorumlardan ve verilen kodlardan

canosayan

Chmod bizim işimiz.

Mx0Ub

crontab da döngü yapabiliyormuyuz ?
Not:
Hic bi sorumluluk kabul edilmez yapılan yorumlardan ve verilen kodlardan

mami96

crontab ile bir betiğinizi ya da programinizi istediğiniz zamanlarda çalıştırabilirsiniz.

tabii hic kullanmadim (: ama belgeler.org'da boyle gormustum.

Mx0Ub

#4
her 10 saniye yi ayrı ayrı belirtmek zorundamıyım yoksa dongu varmı ?


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 25 Haziran 2011 - 14:25:35

bu sekilde donguye sokabiliyorum
*/1 * * * * mkdir /mmm
ancak 1 dakikadan asası için olmuyor



Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 25 Haziran 2011 - 14:30:46

şöyle bir program varmı bildiğiniz
program 10 sn /dosya gibi

her 10 sn de calıstırcak gibi
Not:
Hic bi sorumluluk kabul edilmez yapılan yorumlardan ve verilen kodlardan

bytan

Umut en büyük kötülüktür; işkenceyi uzatır. - F.N.


Bir şey ne ise odur, bu kadar. Öyleyse, iki şey arasında bağdaşıklık varsa, bu aralarında iletişim kuruyorlar demek değildir.
"... kavrayışını bilgi ile derinleştir ..."
PF @ ST

utdmr

Cron, 10 saniye gibi küçük aralıklarda yetersiz kalabilir bildiğim kadarıyla, dakika bazında kullanılıyor sanırım en küçük. Bash bilmiyorum ama, şöyle bir şey önerebilirim:

run.py isimli bir dosya oluşturup şunları ekleyin:


#! /usr/bin/env python

import sys
import time
import subprocess

freq = float(sys.argv[1])
command = sys.argv[2:]

while True:
        subprocess.Popen(command)
        time.sleep(freq)


Çalıştırılabilme hakkı verdikten sonra; "./run.py süre komut" şeklinde çalıştırabilirsiniz.
[utdemir@utdemir-arch kekik]$ ./run.py 2 ls -l
toplam 4
-rw-r--r-- 1 utdemir users 150 Haz 25 16:05 run.py
toplam 4
-rw-r--r-- 1 utdemir users 150 Haz 25 16:05 run.py
toplam 4
-rw-r--r-- 1 utdemir users 150 Haz 25 16:05 run.py
toplam 4
-rw-r--r-- 1 utdemir users 150 Haz 25 16:05 run.py

Kişisel Blogum: Çoğunlukla Zararsız - cogunluklazararsiz.org
--
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -and a lot of courage- to move in the opposite direction.

sem

sleep komutu bash ile de doğrudan kullanılabiliyor. Yani döngü sonuna istenilen süre kadar programı uyutmak (sleep komutu ise süreç /process tablosu dışına almak) yeterli olur gibi duruyor...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Mx0Ub

sleep olmazda  içeri onu yazamam
dısardan olması lazım
utdmr sağol bakıyorum
Not:
Hic bi sorumluluk kabul edilmez yapılan yorumlardan ve verilen kodlardan

gomugomuno

@nefretmy ne için bunu yapmak istiyorsun  belki farklı çözümleri olabilir.

Mx0Ub

utdmr tam oldu sağol program için anlamayada çalısım python calısmıslım var ama tıkandım bırakdım
gomugomuno halletim hocam
hepinize teşekürler
Not:
Hic bi sorumluluk kabul edilmez yapılan yorumlardan ve verilen kodlardan

sem

#11
Python bilmiyorum hiç ,fakat anladığım kadarı ile;

freq değişkenine; 1. komut satırı argümanı (süre) atanıyor.   ->>>    freq = float(sys.argv[1])
command değişkenine ise 2. komut satırı argümanı atanıyor.   ->>>command = sys.argv[2:]

Yani çalıştırılacak olan program/komut ve süre (periyot) alındıktan sonra, döngüden hiç çıkmayacak şekilde (while True:)

* Programı/komut yürüt
* freq kadar bekle

döngüsüne giriliyor...

Gerisi malum... =)

Ek: Alınan komutu yürütme işi boru haberleşmesi ile yapılıyor gibi duruyor... Popen fonksiyonundan anladığım kadarı ile; pipe open...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

utdmr

@sem0900 güzel anlatmış ama eklemek istediğim küçük bir şey var:

command = sys.argv[2:] satırında, (Python'u sevme nedenlerimden biri), orada [2:]'deki iki nokta; 2 ve sonraki bütün elemanları almak istediğimi belirtiyor, yani ayrıca bir düzenlemeye gerek yok 1'den fazla eleman içeren komutlar için.

Dediğin gibi, Popen yeni bir işlem yaratıp onu yürütmeye başlıyor ama  İşlem bizim işlemden bağımsız olarak başladığı için kodu etkilemiyor, hani 10 saniyede bir komut versek, komut 5 saniye sürse, ikisinin başlaması arasında 15 saniye değil, 10 saniye oluyor, hem de scriptin kapatılması script tarafından çalıştırılmış kodu etkilemiyor :).

Ben onu hep "Process Open" gibi düşünmüştüm, ama araştırınca dediğin gibi "Pipe Open"mış :D.
Kişisel Blogum: Çoğunlukla Zararsız - cogunluklazararsiz.org
--
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -and a lot of courage- to move in the opposite direction.

sem

Boruları kullanırken (bunun Türkçe'si gerçekten boru mu ya, çok kötü =)) süreci başlatırken değil de, yani popen da değil de, borudan okuma işlemleri blokeli oluyor sanırım. Yani eğer ki hafızam beni yanıltmıyorsa C tarafında öyleydi...

İki süreç (process) bir boruya yazdığında okunacak veri gelene kadar, okuyan süreç bloke oluyordu sanırım. Ama bu programda böyle bir işlem söz konusu değil tabii. Gerçi Linux sistem fonksiyonları ile bloke de ayarlanabiliyordu... C ile bir oyun yapmıştım bununla ilgili olarak. C bölümünde aritmetik oyun adı ile vermiştim...

Yalnız [2:] kısmı ise gerçekten çok kullanışlıymış...

Biraz daha var; C++ ve QT ile işim... Sonra Python'a gelecek sıra sanırım =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

6ng4n

C++da sleep de kullanabilirsiniz

while(a=b)
{
sleep(10);
komutlar;
}

mami96

Peki C++'ta bash komutlari calistirabilir miyiz?

6ng4n

evet system(); fonksiyonu ile yapabilirsiniz
Düzenleme:
az önce yazdığım komut dizisi 10 saniye bekler öyle çalışır.
şu şekle çevirirseniz
while(a=b)
{
system("komut");
sleep(10);
}
önce komutu çalıştırır 10 saniye bekler sonra devam eder

mami96

zenity komutunu soyle calistirabildim.


#include <stdio.h>
#include <stdlib.h>

int main()
{
    system("zenity --info");
}



Bu kodla python vs. calistirma sansim var mi?

gerci suanlik bash isimi gorecektir (:

tesekkurler

6ng4n

system("python script"); olarak evet

mami96

system fonksiyonuna yazacağımız komut

python dosya.py

mi olmali?

yoksa python kodlarini yazarak direkt olarak calistirabilir miyiz?

sem

system fonksiyonuna göndereceğiniz parametre; aynı uçbirime yazdığınız şekilde olmalı...

Yani örneğin dosya.py isimi bir Python kodunuz var. buna çalışma izni verdikten sonra /iligili/dizin/dosya.py ile çalıştırabildiğiniz için;

system("/ilgili/dizi/dosya.py"); yazmanız yeterli olur...

system komutu şu durumlarda kullanmakta fayda var; çalıştırılan programın ürettiği çıktı işinize yaramıyorsa system fonksiyonu kullanılabilir.

Fakat örneğin dosya.py'nin hata döndürmesi eğer sizin için önemli ise; örneğin dosya.py şu şekilde bir hata versin;

"XXX dosyası bulunamadı"

Bu sonuca göre eğer bir işlem yapmanız gerekirse bu durumlarda system fonksiyonu kullanışlı değildir, çünkü çalıştırdığınız programın/uygulamanı/sürecin çıktısını elde edemezsiniz...

Bu nedenle Linux üzerinde C ve C++ için yüksek seviye isimli boru (pipe) kullanabilirsiniz.

utdmr'in Python ile yaptığı gibi...

Aynı şekilde C ve C++ için de popen fonksiyonu kullanılır...

Kullanıma örnek görmek için UGT'nin Kısayol Oluşturucu ve Mixer programınını inceleyebilirsiniz...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

mami96

Baktim simdi ona

command degiskenini popen'e yollamis.

popen ise sys.argv ile komut satirindan arguman almasini istemis.

aslinda dediginiz popen'i bir incelemek istiyorum

hatta onun için de şöyle bir örnek buldum


char output[100];
FILE *p = popen("g++ main.cpp -o main 2>&1", "r");
if(p != NULL) {
while(fgets(output, sizeof(output), p) != NULL) {


http://www.cplusplus.com/forum/beginner/28982/

bir dokuman okuyayim yeter bana (:

sem

fopen gibi düşünebilirsiniz popen'ı...

Açtığınız dosya içerisinde ise yürütülen komutun/uygulamanın çıktısının bulunduğunu düşünün... Diğerleri dosya ile aynı...

Örneğin ;

FILE *p = popen("ls -li", "r");

saturundan sonra p'yi; son dizin içerisinde ls -li komutunun çıktısı olan br dosya gibi düşünebilirsiniz. r denmiş yani okuma modunda açılmış... Yani bu boruya yazma yapılamaz.

Yalnız tabii dosya ile bazı teknik farklılıkları var. Öğrneğin dosya göstericisi konumunun ayarlanmasına yönelik fonksiyonlar gibi (seek içeren ya da rewind gibi...)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

mami96

Dediginizi arastiracagim

bu konu icin Dosya islemeye bakmak yeterli midir?

sem

Hayır yeterli değil...

Dosya işlemlerini biliyorsanız çok rahat edersiniz ama... Çünkü dediğim gibi okuma ve yazma dosya işlemleri ile hemen hemen aynı. Fakat bazı farklılıklar olabilir... Örneğin dosyadan 10 byte okudunuz.  Sonra en baştan tekrar okumanız gerekti; dosya işlemlerindeki gibi rewind() fonksiyonu ile en başa alamazsınız.

Ben de çok fazla bilmiyorum açıkcası, çok üzerine gitmeye fırsatım olmadı... Gerektiği kadar okuyup kullanmıştım. "Nereden okudun?" derseniz Kaan Aslan'ın Unix/Linux sistem programlama kurs notlarından bakmıştım... Yanılmıyorsam kendi sitesinden indirebilirsiniz...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?