簡體   English   中英

使用python自動創建bash腳本

[英]Use python to automate creation of bash scripts

我正在嘗試為我在這里提出的問題尋求幫助,並且從一些進一步的研究中,我認為 Python 腳本可能是答案。 也就是說,我是 Python 的新手,不確定如何實現我的想法,或者這是否正確。

基本上我認為我需要一個 python 腳本,它可以接受我傳遞的變量,然后將這些變量寫入 .sh 文件。 有沒有一種簡單的方法可以做到這一點?

編輯:為了回應一些評論,我認為我應該更詳細地說明我的問題。

我正在通過 SLURM 腳本運行 matlab 函數。 SLURM 腳本(我認為)是一種 bash 腳本,但專門用於在 HPC 上調度作業。 我的問題是,例如,我想一次提交 10 個作業,但所有作業都將特定變量更改為某個值。 現在,問題是我不能簡單地做到這一點,因為據我所知,沒有將變量傳遞給 SLURM 腳本的好方法。 所以我目前正在做的是實際上有十個版本的提交腳本,每個版本都有自己的固定變量 - 然后當我想提交所有作業時,我打開這十個腳本中的每一個並手動更新共享變量,然后然后一一運行。 我想我所追求的是一個 python 腳本,它將進入每個 SLURM 腳本並對其進行編輯。

有兩個選項可以解決您的問題:

  1. 你可以使用slurm 數組

下面的示例循環遍歷數字 1-16:

#!/bin/bash

#SBATCH --job-name=array
#SBATCH --output=array_%A_%a.out
#SBATCH --error=array_%A_%a.err
#SBATCH --array=1-16
#SBATCH --time=01:00:00
#SBATCH -p partition-name
#SBATCH --ntasks=1
#SBATCH --mem=4G

# Print the task id.
echo "My SLURM_ARRAY_TASK_ID: " $SLURM_ARRAY_TASK_ID

# run code
./exec ${SLURM_ARRAY_TASK_ID}-inputfile.i
  1. 你可以使用 python 模板字符串

這是一個例子

在下面的 generate-scripts.py 中,它在 0-10 之間循環,但您可以將其替換為字符串或任何東西——它很強大:

template = None
# Create input files from boiler plate
with open(templatefname, "r") as template_f:
    template_string = template_f.read()
    template = Template(template_string)

for i in range(10):
    newfilestrin = template.safe_substitute(var=str(i))

然后在您的模板文件中,您可以擁有:

# blah blah
./run ${var}

我已經使用了這兩種解決方案。 如果您更改的輸入只是增加整數,則 SLURM 數組很方便。 Python 模板字符串或文件更強大,但需要做更多的工作。

要回答您與 SLURM 相關的實際問題,您似乎應該在創建作業時使用--export來定義變量,然后這些變量可用作您的作業的環境變量:

sbatch --export=A=5,b='test' jobscript.sbatch

引用手冊的完整性:

--export=<environment variables [ALL] | NONE>

確定將提交環境中的哪些環境變量傳播到啟動的應用程序。 默認情況下,所有都被傳播。 多個環境變量名稱應以逗號分隔。 可以指定環境變量名稱來傳播當前值(例如“--export=EDITOR”)或可以導出特定值(例如“--export=EDITOR=/bin/emacs”)。 [...]

這將創建內容相同但編號不同的文件

    def writeFile(number):
        f = open(filename+str(number)+".slurm","w")
        f.write(content+str(number)+content)
        f.close()

我建議使用simple-slurm ,這是我開發的 Slurm的 Python 包裝器。 然后,您可以使用簡單的 Python 邏輯和變量來創建作業。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM