python - 如何创建一个Python脚本来制作多个bash脚本?

标签 python bash for-loop file-io output

我有一个名为 list.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
<小时/>

我现在已经制作了以下脚本,它几乎可以工作。

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”?不过我看了一下,确实没有。有没有解决的办法?也许我可以使用某种长度函数?

最佳答案

所以,按顺序回答:

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)

顺便说一下,我的代码只是一个猜测。我认为你在陈述你的问题时应该更明确。我不明白你想达到什么目的。

关于python - 如何创建一个Python脚本来制作多个bash脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46685755/

相关文章:

Python 'with' 语句 - 如何判断哪个模块/对象/类支持它?

python - 避免循环并提高性能以更新字典

c++ - C++目标文件和程序文件 union 编译的Bashrc别名

python - 两组参数 python

java - 为什么我不能以这种方式在 for 循环中定义变量?

arrays - 如何处理 Bash 中元素包含空格的数组?

Python paramiko : redirecting stderr is affected by get_pty = True

bash - 从 bash 捕获 telnet 超时

batch-file - For 循环解析路径中带有空格的文件,命令提示符

python - Django REST框架: one method to return several fields