GNU P不接受变量python参数

2024-09-30 06:27:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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, in

iterNum = 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[@]}

Tags: 字符串代码echo参数parallelbar原因整数
1条回答
网友
1楼 · 发布于 2024-09-30 06:27:27

尝试在参数中使用双引号来并行,或者在调用parallel之前执行export sim。你知道吗

parallel  bar  eta -j14 "python3 compute-heat-capacity-generational-2 $sim {1} {2}" ::: \
$(seq 16) ::: \
${gens[@]}
  1. 如果字符串使用单引号('),bash不会展开字符串中的变量。你知道吗
  2. 如果执行export sim,子进程将看到该变量,稍后将展开该变量。你知道吗

相关问题 更多 >

    热门问题