GNU Parallel 不接受变量 python 个参数
Variable python arguments not accepted by GNU Parallel
我有一个 python 代码,它 运行 对我来说是一个模拟,我需要 运行 此代码用于许多不同的参数(字符串、整数和另一个字符串整数)。我的问题是,当我尝试将其与 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, in
iterNum = int(argv[3]) > IndexError: list index out of range
所以我的论点中只有两个被通过,在我的平行线中分配给 {1}
和 {2}
的论点。无论出于何种原因,当我尝试使用并行时,$sim
似乎没有按预期工作。
完整的脚本写在下面,我将模拟目录作为输入,遍历该目录以解析世代号,然后将这两个并行地交给我迭代所有世代和迭代的第三个参数通过 ${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 的参数中使用 double-quotes,或者在调用 parallel
.
之前执行 export sim
parallel --bar --eta -j14 "python3 compute-heat-capacity-generational-2 $sim {1} {2}" ::: \
$(seq 16) ::: \
${gens[@]}
如果字符串使用单引号 ('
),- bash 不会扩展字符串中的变量。
- 如果您这样做
export sim
,该变量将对 sub-processes 可见,您的变量稍后将被扩展。
我有一个 python 代码,它 运行 对我来说是一个模拟,我需要 运行 此代码用于许多不同的参数(字符串、整数和另一个字符串整数)。我的问题是,当我尝试将其与 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}
的论点。无论出于何种原因,当我尝试使用并行时,$sim
似乎没有按预期工作。
完整的脚本写在下面,我将模拟目录作为输入,遍历该目录以解析世代号,然后将这两个并行地交给我迭代所有世代和迭代的第三个参数通过 ${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 的参数中使用 double-quotes,或者在调用 parallel
.
export sim
parallel --bar --eta -j14 "python3 compute-heat-capacity-generational-2 $sim {1} {2}" ::: \
$(seq 16) ::: \
${gens[@]}
-
如果字符串使用单引号 (
- bash 不会扩展字符串中的变量。
- 如果您这样做
export sim
,该变量将对 sub-processes 可见,您的变量稍后将被扩展。
'
),