2017-03-23 4 views
0

Je travaille sur 2 fichiers, et dire ba.py 2.pyComment incrémenter une variable dans un autre script en l'important?

ba.py:

import sys 

count = 1 # This is global count 

def callme(): 
    pass 
    # Doing Some operation 

2.py

import ba 
print ba.count ## This is working fine 
ba.callme() ## This is also working fine. 

Je suis en cours d'exécution d'une automatisation , travail comme ceci:

for i in $(find /home/some/SomeElse/HeyMore -type f); do python 2.py $i; done

Cette commande prend les fichiers du dossier spécifié et les transmet en tant qu'argument à une fonction dans 2.py.

En interne, je souhaite ouvrir le fichier en python et effectuer certaines opérations. Cependant, je ne veux pas surcharger mon système, donc après 10 travaux je veux dormir pendant 10 secondes. Je maintiens le compte en utilisant count dans ba.py. Après avoir été appelé pour la première fois, il doit être incrémenté à 2, et ainsi de suite. Cependant, quand il frappe 10 il devrait dormir comme ma logique est écrite ci-dessous.

print ba.count 
ba.count = ba.count + 1 ## Here increment should happen 
if ba.count % 10 == 0: 
     time.sleep(10) 
else: 
     ba.callme() 

Chaque fois que je lance ce script d'automatisation, je ne vois que 1 « s, et le script ne dort pas au bout de 10 secondes.

Des suggestions sur la façon de résoudre ce problème?

+0

la seule chose que je remarque est script chaque fois que se fait exécuter comptage est à 1. –

+2

réinitialisé Chaque fois que vous faites 'Pytho n scriptname' vous commencez un nouveau processus. Les variables des processus précédents ne sont pas conservées. Si vous devez conserver les données entre les exécutions de script, vous devez les placer dans un fichier. – Barmar

Répondre

1

2.py est exécuté pour chaque fichier et n'a aucune connaissance de l'ensemble de compteurs dans une exécution précédente. Une solution consiste à exécuter uniquement 2.py une fois conduite dans les fichiers que vous souhaitez traiter:

import sys 
import time 

def callme(filename): 
    print filename 

for count,line in enumerate(sys.stdin): 
    if count and not(count % 10): 
     print('sleeping') 
     time.sleep(1) # I got bored.... make that 10 
    callme(line.strip()) 

Et votre script devient

find /home/some/SomeElse/HeyMore -type f | python 2.py 

Si vous ne voulez pas find suspendu les données de pompage autour, vous pourrait tirer les fichiers à la fois et traiter ensuite les

filenames = [line.strip() for line in sys.stdin.readlines()] 
...