2012-03-29 61 views
0

我有2個Python腳本https://gist.github.com/2233477應用程序似乎根據輸入大小運行多次

  • rsgen.py生成simulate.py
  • simulate.py使用「隨機」的投入進行實際模擬

的是,當我開始從rsgen.py--numReferences PARAM增加輸入的大小,我得到不同的輸出

# ./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 
... 

注意當我增加numReference s,Python腳本模擬似乎運行更多次。這是爲什麼?我期待1行「頁面錯誤數量......」

回答

2

這可能與xargs'ARG_MAX'有關,它定義了發送到可執行文件的數量的批量大小;因此,爲什麼多次調用你的腳本,因爲它正在分割跨越多個調用的參數。

嘗試使用-n(或--max-args)標誌xargs

一個更好的辦法產品總數將有simulate.py接受文件的說法,所以你可以做這樣的事情:

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

它可能會快很多,因爲它避免了xargs開銷

+0

好了,所以我使用文件a ['FileType'](http://docs.python.org/dev/library/argparse.html#filetype-objects)。但是我怎麼讀?對不起,我是Python的新手,它看起來並不明顯,我可能會讀/寫這個'FileType'對象 – 2012-03-29 11:33:09

+0

@JiewMeng你會以字符串的形式讀取文件名,然後用'open(filename)'讀取文件對象,然後你可以做'.readlines()',並且一旦你完成了閱讀,你必須'.close()'。請參閱[這個問題](http://stackoverflow.com/a/8010133/1086804) – 2012-03-29 12:17:32

+0

哦,但那麼'FileType'對象如何發揮作用?看來,我可以只使用一個字符串變量呢? – 2012-03-30 00:22:46

相關問題