如何确保slurm中的python提交脚本位于发出sbatch命令的位置?

如何确保slurm中的python提交脚本位于发出sbatch命令的位置?,python,bash,slurm,sbatch,Python,Bash,Slurm,Sbatch,我有一个python提交脚本,我使用sbatch和slurm运行该脚本: sbatch batch.py 当我执行此操作时,由于我假设,batch.py进程没有继承正确的环境变量,所以无法正常工作。因此,它不是从执行sbatch命令的地方运行batch.py,而是从其他地方运行(/)。我已通过使用bash脚本包装python脚本来解决此问题: #!/usr/bin/env bash cd path/to/scripts python script.py 这种临时性的黑客行为似乎起到了作用,但

我有一个python提交脚本,我使用
sbatch
slurm
运行该脚本:

sbatch batch.py
当我执行此操作时,由于我假设,
batch.py
进程没有继承正确的环境变量,所以无法正常工作。因此,它不是从执行
sbatch
命令的地方运行
batch.py
,而是从其他地方运行(
/
)。我已通过使用bash脚本包装python脚本来解决此问题:

#!/usr/bin/env bash
cd path/to/scripts
python script.py
这种临时性的黑客行为似乎起到了作用,但似乎它避免了这个问题,而不是解决它。有人知道如何更好地解决这个问题吗


例如,我知道在docker中存在
-w
-WORKDIR
,以便docker容器知道其假定位置。我想知道slurm是否存在类似的功能。

slurm设计用于在提交作业时推送用户环境,但用户或系统管理员明确禁用的变量除外

但脚本的运行方式如下:脚本复制到Slurm特定目录中分配的主节点上,并从那里运行,将
$PWD
设置为运行
sbatch
命令的目录

您可以通过这样一个简单的脚本看到:

$ cat t.sh
#!/bin/bash
#
#SBATCH --job-name=test_ms
#SBATCH --output=res_ms.txt

echo $PWD
dirname $(readlink -f "$0")

$ sbatch t.sh
Submitted batch job 1109631
$ cat res_ms.txt
/home/damienfrancois/
/var/spool/slurm/job1109631

一个后果是,在当前目录中导入模块的Python脚本无法做到这一点。然后,解决方法是在导入失败之前显式添加
sys.path.append(os.getcwd())

可能:
--workdir=在执行批处理脚本之前,将其工作目录设置为directory。可以将路径指定为执行命令的目录的完整路径或相对路径。
您给sbatch--get user env看了吗?这可能是你需要的。否则,如果环境变量仅添加到当前终端中,您可能希望使用sbatch--export显式传递所需的变量。不确定查看
--获取用户环境的含义,您的意思是查看标志还是环境变量?可能会有帮助:确定,因此,根据您的回复,bash提交脚本中的
$CWD
应该会给我一些东西…但它当前给我一个空的
.out
文件。对不起,不是
$CWD
,而是
$PWD
。我更正并更新了我的答案