【问题标题】:Why converting to int the Process Id in Condor doesn't work this way?为什么在 Condor 中转换为 int 进程 ID 不起作用?
【发布时间】:2021-12-13 12:45:57
【问题描述】:

所以我有以下有效的 HTCondor 提交描述:

n = $(ProcId) + 1
arguments = read_$INT(n).fa

为什么我不能这样做?

n = $INT($(ProcId) + 1)
arguments = read_${n}.fa

【问题讨论】:

  • 您到底在哪里使用这个(bash 脚本、提交文件、ClassAd、...)以及使用第二个变体时出现什么错误?
  • 你提到的代码 sn-ps 都不能在 bash 中工作。另外,你有什么确切的错误/行为?
  • 这是一个提交秃鹰文件。错误是:警告:行 'n = $INT($(ProcId) + 1)' 未被 condor_submit 使用。是不是笔误?
  • 基本上我只需要一个从 1 开始的变量,所以我想在 condor_submit 文件中使用 ProcId,但不幸的是它从 0 开始。我已经让它与第一个版本一起使用,但后来我有了每次都转换为 INT(在输出文件等中),所以我正在寻找一个更简单的版本。

标签: bash variables condor


【解决方案1】:

HTCondor submit description files 使用他们自己的格式进行替换,而不是 bash/shell 语法。

$(macro_name:default initial value) 形式的无参数宏可以在 HTCondor 提交描述文件的任何地方使用,以在提交时提供文本替换。宏可以以行的形式定义为

<macro_name> = <string>

要引用宏(变量)n,请使用 $(n) 而不是 bash 语法 ${n}。由于宏不能嵌套,因此基于另一个宏评估 $INT 需要一个中间变量:

proc1 = $(ProcId) + 1
n = $INT(proc1)
arguments = read_$(n).fa

【讨论】:

  • 感谢您的帮助!不幸的是,我仍然有这个错误:Submitting job(s)ERROR at Queue statement on Line 35: $INT() macro: $(ProcId does not evaluate to an integer!
  • @Caterina 你说得对,我的错。宏不能嵌套。更新了。
  • 非常感谢!会把你包括在我对这个项目的致谢中;)
猜你喜欢
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多