GNU并行数组参数

时间:2018-02-21 16:04:40

标签: python gnu-parallel

假设我有一个python文件test.py

import os

class print_args(object):

    def__init__(self, x, y, z):

        self.x = x
        self.y = y
        self.z = z

        print(x)
        print(y)
        print(z)

if __name__ == '__main__':

    parser = argparse.ArgumentParser()
    parser.add_argument('--x', nargs='+', type = str)
    parser.add_argument('--y', nargs='+', type = int)
    parser.add_argument('--z', type = int)
    args = parser.parse_args()

    print_args(args.x, args.y, args.z)

我可以使用以下参数从终端运行test.py

python3 test.py --x a b --y 2 3 --z 10

结果如预期:

a b
2 3
10

如何在带有数组参数的终端中使用GNU parallel运行test.py解决方案等同于运行:

python3 test.py --x a b --y 2 3 --z 10
python3 test.py --x a b --y 2 3 --z 20 
python3 test.py --x a b --y 2 3 --z 30
python3 test.py --x a b --y 2 3 --z 40

我回答自己问题的错误尝试是:

parallel --link 'python3 test.py --x {1} --y {2} --z {3}' ::: \
> 'a b' 'a b' 'a b' 'a b' ::: \
> '2 3' '2 3' '2 3' '2 3' ::: \
> '10' '20' '30' '40'

1 个答案:

答案 0 :(得分:3)

希望正如评论中所讨论的,这对您有用:

parallel -k --dry-run python3 test.py --x "a b" --y "2 3" --z ::: 10 20 30 40

示例输出

python3 test.py --x a b --y 2 3 --z 10
python3 test.py --x a b --y 2 3 --z 20
python3 test.py --x a b --y 2 3 --z 30
python3 test.py --x a b --y 2 3 --z 40

如果命令看起来很好,则删除--dry-run部分,然后再次运行它以实现。