【问题标题】:Enabling/disabling binary flags in GNU Parallel在 GNU Parallel 中启用/禁用二进制标志
【发布时间】:2022-11-16 16:24:52
【问题描述】:

我正在尝试使用 GNU Parallel 来运行具有多个二进制标志的脚本。我想按如下方式启用/禁用它们:

给定一个名为“sample.py”的脚本,有两个选项,“--seed”接受一个整数和“--something”这是一个二进制标志并且不接受输入,我想构造一个调用 parallel 产生以下电话:

python sample.py --seed 1111
python sample.py --seed 1111 --something
python sample.py --seed 2222
python sample.py --seed 2222 --something
python sample.py --seed 3333
python sample.py --seed 3333 --something

我试过类似的东西

parallel python sample.py --seed {1} {2} ::: 1111 2222 3333 ::: "" --something
parallel python sample.py --seed {1} {2} ::: 1111 2222 3333 ::: '' --something
parallel python sample.py --seed {1} {2} ::: 1111 2222 3333 ::: \  --something

但没有任何运气。我试图通过 GNU parallel 实现的目标是什么?我可以修改我的脚本,为标志采用明确的 TRUE/FALSE 值,但我希望尽可能避免这种情况。

【问题讨论】:

  • 这是什么版本的parallel?你从哪里得到 :::{1}parallel 理解的东西?

标签: bash zsh gnu-parallel


【解决方案1】:
> bash$ cat sample.py 
#!/usr/bin/python3

import sys
import time

time.sleep(0.2)
print(sys.argv)
> bash$ cat split.sh 
#!/bin/sh

exec $*
> bash$ for seed in 1111 2222 3333; do 
    printf "%s
【解决方案2】:

你是所以关。

GNU Parallel 引用替换字符串。这通常是有道理的,因为给它这样的文件名是安全的:

My brother's 12" records, all with ***.csv

否则可能会带来无穷无尽的麻烦。

但是,为了保持一致,GNU Parallel 还引用了空字符串。这就是在这里打击你的原因。

--dry-run 显示发生了什么:

$ parallel --dry-run python sample.py --seed {1} {2} ::: 1111 2222 3333 ::: '' --something
python sample.py --seed 1111 ''
python sample.py --seed 1111 --something
python sample.py --seed 2222 ''
python sample.py --seed 2222 --something
python sample.py --seed 3333 ''
python sample.py --seed 3333 --something

那你怎么能避免呢?

您可以告诉 shell 评估所有字符串:

parallel eval python sample.py --seed {1} {2} ::: 1111 2222 3333 ::: '' --something

但是当您需要手术刀时,这可能有点钝。从版本 20190722 开始,您还可以使用 {=uq=}uq() 是一个 perl 函数,它告诉 GNU Parallel 这个替换字符串不应该被引用:

$ parallel-20190722 --dry-run python sample.py --seed {1} {=2 uq=} ::: 1111 2222 3333 ::: '' --something
python sample.py --seed 1111 
python sample.py --seed 1111 --something
python sample.py --seed 2222 
python sample.py --seed 2222 --something
python sample.py --seed 3333 
python sample.py --seed 3333 --something

【讨论】:

    猜你喜欢
    • 2013-01-23
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2016-01-10
    • 2013-02-08
    • 1970-01-01
    相关资源
    最近更新 更多