我编写了一个需要两个参数的python脚本,当我在命令行上运行它时工作正常:
pythonscript.py arg1 arg2
我需要在SLURM批处理脚本中运行它,但每当我这样做时,我都会收到“非法指令”错误和核心转储。这是我正在使用的脚本的一个例子:
#!/bin/bash
# Set your minimum acceptable walltime, format: day-hours:minutes:seconds
#SBATCH --time=0-00:30:00
# Set name of job shown in squeue
#SBATCH --job-name pythonscript
# Request CPU resources
#SBATCH --ntasks=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1
# Memory usage (MB)
#SBATCH --mem-per-cpu=3000
# Use modules to set the software environment
module purge
module load python/2.7.8-gcc
pythonscript.py arg1 arg2
我花了很多时间试图找出导致核心转储的确切原因,这就是我将其缩小到的范围。它只会在从批处理脚本运行时崩溃,并且只有在我尝试使用参数运行脚本时才会崩溃。当我修改它以不带参数运行时,它运行正常。谁能告诉我如何在SLURM脚本中将这些参数传递给我的python脚本?
答案 0 :(得分:0)
这可能看起来像一个愚蠢的问题,但是pythonscript.py可执行文件?
你还试过吗
python pythonscript.py arg1 arg2
或者,您可以更改
#!/bin/bash
到
#!/bin/python
或您要使用的python版本的相应路径。
答案 1 :(得分:0)
问题是我的工作被发送到的节点。我设法使用以下命令检查我的作业在哪个节点上运行而没有错误:
sacct --format=JobID,"AllocCPUS,Node,JobName%20,MaxVMSize,MaxRSS,ReqMem,Start,End"
我确定了正确的节点,然后使用以下命令切换到我的.sh中:
#SBATCH -w, --nodelist=compute124
答案 2 :(得分:0)
我使用以下内容,并且可以添加任意数量的参数。
#!/bin/bash
#SBATCH --cpus-per-task=1 # number of cores
cd $SLURM_SUBMIT_DIR
pwd
python $SLURM_SUBMIT_DIR/python.py HumptyDumpty.txt newhumpty.txt ad.txt