【发布时间】:2020-07-21 08:09:01
【问题描述】:
我有一个 Python 脚本,它最后通过subprocess.Popen() 运行一个名为“quickFit”的可执行文件/程序。当我启动终端时,我总是移动到 quickFit 目录和source setup.sh,这样我就可以从任何地方运行该可执行文件。然后我尝试在 HTCondor 作业中运行此脚本,但它出错了。我的外壳是 zsh。
这是一个例子:
test.py:
#!/usr/bin/env python
import subprocess
out = subprocess.check_output("quickFit -h", shell = True)
print(out)
test.sub:
executable = ~/private/scripts/TEST.py
universe = vanilla
log = ~/private/scripts/TEST/log.txt
error = ~/private/scripts/TEST/err.txt
should_transfer_files = IF_NEEDED
when_to_transfer_output = ON_EXIT
queue 1
运行test.py 会产生预期的行为:quickFit 命令运行并显示选项列表和可能的参数(-h 用于帮助)。这与我从终端运行 quickfit -h 时的行为完全相同。
但是,运行 condor_submit test.sub 会导致作业提前结束,并且 err.txt 文件会通知我非零退出状态 127:/bin/sh: quickFit: command not found
我已经尝试过chmod -R 777 * quickFit 目录中的所有内容,因为我认为它与权限有关,但没有奏效。
我还尝试(在 python 中)将目录更改为 quickFit 目录并重新采购 setup.sh,但这带来了更多问题。
最后我尝试将getenv = True 添加到.sub 文件中,导致以下错误:quickFit: error while loading shared libraries: libquickFit.so: cannot open shared object file: No such file or directory
【问题讨论】:
-
quickFit 不在您的 $PATH 中,因此请指定 quickFit 的完整路径或将 $HOME/private/scripts 添加到您的 $PATH 变量中
-
@Joshua:另外,错误信息说 /bin/sh: quickFit,这意味着你既没有通过 bash 也没有通过zsh.
标签: python zsh executable jobs condor