gnu平行不接受的可变python参数



我有一个为我运行模拟的python代码,我需要为许多不同的参数(字符串,一个整数和另一个Stringy Integer(运行此代码。我的问题是,当我尝试与我的论点的GNU平行部分平行时,我的论点不会经过(我的第一个字符串(。可能负责的特定行是:

parallel --bar --eta -j14 'python3 compute-heat-capacity-generational-2 $sim {1} {2}' ::: 
$(seq 16) ::: 
${gens[@]}

我从python获得的错误msg是:

追溯(最近的最新电话(:
文件" Compute-Heat-Heat-apacity-Generations-2",第20行,

iternum = int(argv [3](> indexError:列表索引超出范围

因此,我的参数只有两个参数,这些参数分配给了我的并行行中的{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之前使用参数中的双引号或进行export sim

parallel --bar --eta -j14 "python3 compute-heat-capacity-generational-2 $sim {1} {2}" ::: 
$(seq 16) ::: 
${gens[@]}
  1. bash如果字符串使用单引号('(。
  2. ,bash不会在字符串中扩展变量
  3. 如果您执行export sim,则该变量将对子过程可见,并且您的变量将在以后扩展。

相关内容

  • 没有找到相关文章

最新更新