我有一個文件,叫做LIST.TXT,這是文件的名稱的列表:的Python:腳本進行多次的bash腳本
input1.txt
input2.txt
input3.txt
我想建立一個python腳本,這將使一個文件每個這些文件名。更確切地說,我需要它來打印一些文本,合併文件的名稱並將其保存到一個唯一的.sh文件中。我的腳本如下:
import os
os.chdir("/Users/user/Desktop/Folder")
with open('list2.txt','r') as f:
lines = f.read().split(' ')
for l in lines:
print "#!/bin/bash\n#BSUB -J",l+".sh","\n#BSUB -o /scratch/DBC/user/"+l+".sh.out\n#BSUB -e /scratch/DBC/user/"+l+".sh.err\n#BSUB -n 1\n#BSUB -q normal\n#BSUB -P DBCDOBZAK\n#BSUB -W 168:00\n"
print "cd /scratch/DBC/user\n"
print 'grep "input"',l+" > result."+l+".txt"
with open('script{}.sh'.format(l), 'w') as output:
output.write(l)
我有幾個問題:
- 輸出文件只包含文件的名稱 - 不是我所打印的內容。
需要明確的是我的輸出文件(我應該有3個)應該是這樣的:
#!/bin/bash
#BSUB -J input3.sh
#BSUB -o /scratch/DBC/user/input1.sh.out
#BSUB -e /scratch/DBC/user/input3.sh.err
#BSUB -n 1
#BSUB -q normal
#BSUB -P DBCDOBZAK
#BSUB -W 168:00
cd /scratch/DBC/user
grep "input" input3 > result.input3.txt
我很新的Python所以我假設有可能是印刷簡單得多的方式和插入我的文字。任何幫助將非常感激。
UPDATE 我現在已經做了下面的腳本,它幾乎可以工作。
import os
os.chdir("/Users/user/Desktop/Folder")
with open('list.txt','r') as f:
lines = f.read().split('\n')
for l in lines:
header = "#!/bin/bash \n#BSUB -J %s.sh \n#BSUB -o /scratch/DBC/user/%s.sh.out \n#BSUB -e /scratch/DBC/user/%s.sh.err \n#BSUB -n 1 \n#BSUB -q normal \n#BSUB -P DBCDOBZAK \n#BSUB -W 168:00\n"%(l,l,l)
script = "cd /scratch/DBC/user\n"
script2 = 'grep "input" %s > result.%s.txt\n'%(l,l)
all= "\n".join([header,script,script2])
with open('script_{}.sh'.format(l), 'w') as output:
output.write(all)
這個問題我還有的是,這4個創建腳本,而不是3如我所料:script_input1.sh,script_input2.sh,script_input3.sh和script_sh。最後一個,script_sh只是打印了文本,但沒有任何「輸入」文本所在的位置。我認爲這是因爲我的list.txt文件在其末尾有一個「\ n」?但是,我看起來真的沒有。有沒有解決的辦法?也許我可以使用某種長度函數?
沒有必要運行真的使用Python,會不會有一個Bash腳本呢? –
不,我真的很想在這種情況下使用Python。我知道Bash可以做到這一點。 – m93
正確的解決方案可能是將變量作爲參數傳遞給靜態腳本,而不是寫入大量帶有變量的靜態腳本。 – tripleee