我有一个python代码为我运行模拟,我需要为许多不同的参数(一个字符串、一个整数和另一个stringy整数)运行此代码。我的问题是,当我尝试用GNU并行化它时,我的参数的一部分没有通过(我的第一个字符串)。可能造成这种情况的具体原因是:
parallel --bar --eta -j14 'python3 compute-heat-capacity-generational-2 $sim {1} {2}' ::: \
$(seq 16) ::: \
${gens[@]}
我从python得到的错误消息是:
Traceback (most recent call last):
File "compute-heat-capacity-generational-2", line 20, initerNum = int(argv[3]) > IndexError: list index out of range
所以只有两个参数通过了,在我的平行行中,分配给{1}
和{2}
的参数。不管出于什么原因,当我尝试使用parallel时,$sim
似乎没有按预期工作。你知道吗
完整的脚本写在下面,我将simulation目录作为输入,循环遍历目录以解析生成号,然后将它们交给parallel,在这里我遍历所有的生成,第三个参数由${seq 16}
迭代
任何关于如何与平行工作的建议将不胜感激。在过去的几天里,我大部分时间都在阅读手册和示例,但我没能解决这个问题。我很确定,问题很简单,就是如何给参数打上{}的标签,并将输入信息提供给它们,但我似乎找不到合适的组合来实现这一点。你知道吗
#!/bin/bash
echo "Choose a simulation: "
read sim
echo "Starting Heat Capacity Calculations"
gens=(save/$sim/isings/*)
#find all generations in simulations folder, put into array
for ((i=0; i<${#gens[@]}; i++));
do
#find the generation number from file string
gens[i]=$(echo ${gens[$i]} | cut -d "[" -f2 | cut -d "]" -f1)
done
parallel --bar --eta -j14 'python3 compute-heat-capacity-generational-2 $sim {1} {2}' ::: \
$(seq 16) ::: \
${gens[@]}
尝试在参数中使用双引号来并行,或者在调用
parallel
之前执行export sim
。你知道吗'
),bash不会展开字符串中的变量。你知道吗export sim
,子进程将看到该变量,稍后将展开该变量。你知道吗相关问题 更多 >
编程相关推荐