Her dosya değiştiğinde bir dosyayı çalıştırmak istiyorum


2

X miktarını çalıştırdıktan sonra otomatik olarak biten bir python betiğim var, programın başlangıcında değerini ayarlar. restart.txt Bu kodu kullanarak 0'a

restart = open("restart.txt", "w")
restart.write("0")
restart.close()

Sonra programın sonunda dosyayı 1'e sıfırlar, böylece yeniden başlatmayı başlatabilir. inotify, bunun gibi.

restart = open("restart.txt", "w")
restart.write("1")
restart.close()
exit //closes program

Ben istiyorum inotify komut dosyası ya da onun gibi bir şey, değeri ne zaman restart.txt programı tekrar açmak için 1 olarak değişir, yeniden başlat.

Bunu nasıl yapacağım hakkında inotify senaryo veya benzeri bir şey?


Yanlış anlamış olabilirim, ancak komut dosyasını çalıştırdıktan hemen sonra yeniden başlatmak istediğiniz gibi görünüyor. Bu durumda, neden betiği yinelemek için değiştirmiyorsunuz ya da her şey etrafında bir sarıcı mı? Neden ilgileniyorsun inotify ?
bertieb

@bertieb betiğimin amacı, 19 kez kendini kapatıp belli bir işlemi tamamlamak. Komut dosyasından yeniden başlatılmasını istiyorum ancak kullanılan kütüphanecilerden biri bunu desteklemiyor. Alternatif çözümüm dış dosyayı değiştirmek ve değiştiğinde yeniden başlatmak için inotify komutunu kullanmak.
Jaffar

Hangi kitaplık, bütünlük dışında (ve merak) hatırına? Her durumda, örneğin yaparak while true; do python myscript.py; done tekrar tekrar, sonsuz python betiğini çağırmak? Kullanmak için iyi bir neden olabilir inotify ki burada göremiyorum ama işleri basit tutmanın hayranıyım!
bertieb

Skype4Py ve Cleverbot en az 19 satırdan 30’a kadar, reklamları skype görüşmesine yaymaya başlayacak, yeniden başlatırsam, hiçbir zaman reklam yayınlayamayacak. Betik, her bir amaç için (mesajları okumak ve cevap vermek) bir işlev kullanır, bu yüzden önerdiğiniz gibi bir döngü içinde çalıştırılamaz.
Jaffar

Tamam, yeterince adil. Neden bir bashta çalıştırılamayacağını göremiyorum while döngü - çalışıyor, bir şeyler yapıyor exit yeniden başlatarak. Neden bir ile başlıyor inotify script ile yeni bir örnek başlatmaktan farklı python myscript.py ? Bunun neden bir olasılık olmadığını açıklamak için sorunuza daha fazla bağlam eklemek faydalı olabilir; ama bariz bir şeyi kaçırmış olabileceğimi kabul ediyorum!
bertieb

Yanıtlar:


1

Şu bash kod pasajı çalıştırılabilir bir bash komut dosyasının içine yerleştirilebilir:

     FORMAT=$(echo -e "\033[1;33m%w%f\033[0m written")
     while /usr/bin/inotifywait -qe close_write --format "$FORMAT" restart.txt
     do
             [ $(cat restart.txt) -eq 1] && /path/to/program/to/be/executed || echo "nothing to do"
     done

İnotifywait çağrısı, telefondaki restart.txt dosyasını izler. q bir etkinlik için uiet modu (yani, bazı çıktıların bastırılması) -e ) hangisi dosyayı yazmak için açtıktan sonra dosyayı kapatın. . Ancak, inotifywait Dosyanın gerçekten yazılmış olup olmadığını ayırt edemem, bu nedenle aşağıdaki satır bir test uygular: eğer restart.txt içeriyorsa 1, sonra bazı dosyaları yürütün, ancak hala içeriyorsa 0 o zaman hiçbir şey yapmayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.