2016-09-08 69 views
0

您好我有以下代碼:的Python執行內部地圖subprocess.call

import sys 
import multiprocessing as mp 


def create_parser(): 
    from argparse import ArgumentParser, FileType 
    ap = ArgumentParser() 
    ap.add_argument('infile', type=FileType('r'), 
     help="file with shell commands to execute") 
    ap.add_argument('-n', '--ncpu', type=int, default=0, 
     help="Number of CPUs to use (default: %(default)s: all CPUs)") 
    return ap 


def cpus_to_use(ncpu): 
    return ncpu if ncpu else mp.cpu_count() 


if __name__ == '__main__': 
    from subprocess import call 

    ap = create_parser() 
    args = ap.parse_args(sys.argv[1:]) 

    ncpu = cpus_to_use(args.ncpu) 

    if args.infile: 
     # Read commands from already open file and close 
     commands = [c for c in args.infile.read().split('\n') if c] 
     args.infile.close() 

     # Create a pool and map run_cmd to the shell commands 
     pool = mp.Pool(processes=ncpu) 
     pool.map(call, commands) 

我基本上導入從具有每行一個特定的命令來執行(即我在命令行的文本文件試圖並行化)。我正在使用Python 2.7.12,並且print(command)的輸出看起來很好。

我懷疑有在最後一行行語法錯誤當我越來越: 文件「run_parallel.py」,第47行,在 pool.map(打電話,命令) 文件「/家/ ECT /anaconda2/lib/python2.7/multiprocessing/pool.py「,第251行,在地圖 返回self.map_async(func,iterable,chunksize).get() 文件」/ home/ect/anaconda2/lib/python2 0.7 /多/ pool.py」,線路567,在獲取 提高self._value

謝謝

回答

0
commands = [c.split() for c in args.infile.read().split('\n') if c] 

(這是從http://sburns.org/2014/05/03/cortical-tractography-recipe.html,對吧?我只是有同樣的問題:) 它似乎通過拆分命令中的每個條目工作在空白處,以便池能夠正確地解析每個函數調用的參數。

+0

非常感謝您的回答! – Francesco

+0

這是一個有點偏離主題,但我沒有設法運行在'sburns'的'教程'中運行的纖維束...不知怎的,probtrackx似乎並沒有去任何地方 - 所以,如果你發現任何其他錯誤代碼/腳本在網站上,請讓我知道,我也會這樣做! – mrburnst

相關問題