Python:生成多个bash脚本的脚本

2024-03-29 13:20:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个文件,叫列表.txt,这是文件名的列表:

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非常陌生,所以我假设可以有更简单的方法来打印和插入我的文本。任何帮助都将不胜感激。你知道吗

更新 我现在已经做了下面的脚本,它几乎可以工作了。你知道吗

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\u input1.sh、script\u input2.sh、script\u input3.sh和script\u sh。最后一个脚本,script\u sh只包含打印的文本,而没有“输入”文本所在的位置。我想这是因为我的列表.txt文件结尾有一个“\n”?然而,我看了看,真的没有。有办法吗?也许我可以用某种长度函数?你知道吗


Tags: 文件文本txt脚本os文件名shwith
2条回答

所以,按顺序回答:

1)你能详细说明这个问题吗?你数了4个txt文件,但是你的代码只生成了3个不同的脚本?你知道吗

2)当然,您需要创建一个var,而不仅仅是使用print语句 3) 只需更改权限

总之,我会用这种方法:

import os
for i, file in enumerate(os.listdir("/Users/user/Desktop/Folder")):
  if "input" in file:
    with open(file) as f:
        lines = f.readlines()

        for l in lines:
            data = ""
            data += "#!/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"
            data += "cd /scratch/DBC/user\n"
            data += 'grep "input"'+l+" > result."+l+".txt"

            with open('script%s.sh'%i, 'w') as output:
                output.write(data)
            os.chmod("script%s.sh'%i", 700)

顺便说一下,我的密码只是猜测。我认为你应该更明确地说明你的问题。我不明白你想达到什么目的。你知道吗

另一个解决方案是

script1.sh
script2.sh
script3.sh

等等,就是创建一个文件script.sh

#!/bin/bash
#BSUB -J "$1".sh 
#BSUB -o /scratch/DBC/user/"$1".sh.out
#BSUB -e /scratch/DBC/user/"$1".sh.err
#BSUB -n 1
#BSUB -q normal
#BSUB -P DBCDOBZAK
#BSUB -W 168:00

cd /scratch/DBC/user
grep "input" "$1" > result."$1".txt

并使用

script.sh input1
script.sh input2
script.sh input3

相关问题 更多 >