我有一个为我运行模拟的python代码,我需要为许多不同的参数(字符串,整数和另一个字符串整数)运行此代码。我的问题是,当我尝试将此并行化与GNU并行时,我的参数部分不会通过(我的第一个字符串)。可能对此负责的特定行是:
parallel --bar --eta -j14 'python3 compute-heat-capacity-generational-2 $sim {1} {2}' ::: \
$(seq 16) ::: \
${gens[@]}
我从python获得的错误信息是:
追踪(最近的呼叫最后):
文件“compute-heat-capacity-generational-2”,第20行,iterNum = int(argv [3])> IndexError:列表索引超出范围
所以我的论点中只有两个经过,我的并行中分配给{1}
和{2}
的参数。无论出于何种原因,当我尝试使用并行时,$sim
似乎没有按预期工作。
完整的脚本写在下面,我将模拟目录作为输入,循环遍历目录以解析世代号,然后将这两个文件移交到我遍历所有代的并行,第三个参数迭代{ {1}}
非常感谢任何有关如何使用并行的建议。过去几天我花了大部分时间阅读手册和示例,但我无法解决这个问题。我很确定这个问题很简单,我如何标记我的参数`{}'并将它们输入它们,但我似乎无法找到合适的组合来实现它。
${seq 16}
答案 0 :(得分:1)
尝试在并行参数中使用双引号,或在调用export sim
之前执行parallel
。
parallel --bar --eta -j14 "python3 compute-heat-capacity-generational-2 $sim {1} {2}" ::: \
$(seq 16) ::: \
${gens[@]}
'
),则export sim
,变量将对子流程可见,您的变量将在稍后展开。