2012-03-29 8 views
0

Ich habe 2 Python-Skripts https://gist.github.com/2233477.Die Anwendung scheint je nach Eingabegröße mehrere Male ausgeführt zu werden

  • rsgen.py erzeugt "random" Eingänge für den Einsatz in simulate.py
  • simulate.py macht die eigentliche Simulation

Sache ist, wenn ich die Eingangsgröße von rsgen.py mit dem --numReferences param zu erhöhen beginnen, erhalte ich verschiedene Ausgänge

# ./rsgen.py --numReferences 1000 > rs.txt; cat rs.txt | xargs ./simulate.py 
Number of page faults : 59 

# ./rsgen.py --numReferences 100000 > rs.txt; cat rs.txt | xargs ./simulate.py 
Number of page faults : 873 
Number of page faults : 848 
Number of page faults : 823 
Number of page faults : 103 

./rsgen.py --numReferences 1000000 > rs.txt; cat rs.txt | xargs ./simulate.py 
Number of page faults : 866 
Number of page faults : 869 
Number of page faults : 876 
Number of page faults : 907 
Number of page faults : 910 
Number of page faults : 1001 
Number of page faults : 845 
... 

Beachten Sie, wie ich numReference erhöhen s scheint das simulierte Python-Skript öfter zu laufen. Warum das? Ich erwarte nur 1 Zeile von "Anzahl der Seitenfehler: ..."

Antwort

2

Dies hat wahrscheinlich etwas mit xargs 'ARG_MAX zu tun, die eine Batch-Größe definiert für wie viele Argumente an eine ausführbare Datei senden; Daher mehrere Aufrufe Ihres Skripts, da es die Argumente über mehrere Aufrufe aufteilt.

Versuchen Sie die -n (oder --max-args) Flagge von xargs.

Eine bessere Art alltogether wäre simulate.py zu haben eine Datei Argument akzeptieren, so dass Sie so etwas tun könnte:

./rsgen.py --numReferences N > rs.txt; 
./simulate.py -f rs.txt 

Es wäre wahrscheinlich viel schneller sein, da es die xargs Kopf

+0

Ok vermeidet so Ich benutze die Datei a ['FileType'] (http://docs.python.org/dev/library/argparse.html#filetype-objects). Aber wie lese ich davon? Entschuldigung, ich bin neu in Python und es scheint nicht offensichtlich zu sein, wie ich dieses 'FileType'-Objekt lesen/schreiben könnte –

+0

@JiewMeng Sie würden den Dateinamen als String lesen und dann' öffnen (Dateiname) ', um ein Dateiobjekt zu erhalten Sie können dann '.readlines()' on und Sie müssen '.close()' sobald Sie mit dem Lesen fertig sind. Siehe [diese Frage] (http://stackoverflow.com/a/8010133/1086804) –

+0

Oh, aber wie kommt dann das 'FileType' Objekt ins Spiel? Es scheint, dass ich dann einfach eine String-Variable verwenden könnte? –