如何使用GNU parallel同时传入输入文件参数与命令字符串参数
解决方法
你只需要做两处修改即可:
- 在Parallel的启动参数中添加
--colsep ' '指定按空格拆分每行的参数 - 去掉命令外层多余的
{}包裹,Parallel的命令部分不需要额外加花括号
修改后的完整脚本如下:
parallel="parallel --delay 0.2 -j 100 --joblog remaining_runs_$1.log --resume --colsep ' '" $srun $parallel python3 scaling.py {1} {2} {3} < missing_runs_$1.txt
原写法异常原因
- 加
--colsep后丢失Python命令:是因为你错误地将整段执行命令包裹在了额外的{}中,GNU Parallel会将{}包裹的内容识别为参数替换占位符,无匹配参数时就会丢弃这部分内容 - 不加
--colsep时参数合并:Parallel默认将整行内容作为单个参数赋值给{1},所以三个数值会被合并为一个字符串传入脚本
验证方法
正式执行前可以添加--dry-run参数打印实际生成的执行命令,确认参数拆分和命令拼接符合预期后再去掉该参数正式运行:
$srun $parallel --dry-run python3 scaling.py {1} {2} {3} < missing_runs_$1.txt
内容的提问来源于stack exchange,提问作者antonia-had
相关产品推荐
相关产品推荐

