我在那裏與蟒蛇子模塊執行的UNIX命令把一個問題: (完整的代碼是在這裏: https://github.com/discoproject/disco/blob/master/lib/disco/worker/classic/func.py)Python的子命令執行卡住了
Unix命令是就地簡單分類。 創建過程的方法:
env = os.environ.copy() env['LC_ALL'] = 'C' cmd, shell = sort_cmd(filename, sort_buffer_size) subprocess.check_call(cmd, env=env, shell=shell)
其中sort_cmd是:
def sort_cmd(filename, sort_buffer_size): return (r"sort -z -t$'\xff' -k 1,1 -T . -S {0} -o {1} {1}" .format(sort_buffer_size, filename), True)
排序命令的輸入文件(其也是輸出文件)是空的。調用該命令之前該文件不是空的(它被打印)。
問題是,如果這是一個python問題,該文件如何爲空。 (一個假設是這個Python 2.7的bug:http://bugs.python.org/issue19809)。
在排序過程中發佈strace表明它被困在futex上。不幸的是,我還沒有能夠重現這個問題,我沒有輸入文件。當排序過程手動終止時,它返回(當然有一個錯誤)。
我使用GNU的coreutils 8.10
使用臨時文件並不是最好的解決方案,因爲我們必須對磁盤使用情況保守。排序命令保證讀取所有內容,然後開始寫入文件。這可能是GNU排序的問題,但我沒有足夠的證據來排除python的bug。另外,鑑於排序不是以並行模式發佈的,我不知道它需要什麼樣的鎖。 –
@ShayanPooya也許它開始寫得很晚,但很明顯,這個文件很早就被清空了。所有的Python都會發出系統命令。如上所述,它沒有關於訪問文件的概念。那該怎麼辦? – glglgl