美文网首页Improve Yourselves认知神经科学
Python在linux下批量执行指令

Python在linux下批量执行指令

作者: Galory | 来源:发表于2018-07-17 13:05 被阅读1次

    今天在分析大鼠的DTI数据,其中有一步在linux下的指令时这样的,

    flirt -in RAT5_b0 -ref RAT4_b0 -dof 12 -out RAT5to4 -omat RAT5to4.mat

    在这个命令里,RAT5_b0是输入文件,每次都要变化;RAT4_b0是参考文件,在我的需要里这个是保持不变的;RAT5to4是输出文件,每次都要变化;RAT5to4.mat是生成的mat文件,也是每次都要重命名。

    如果每次执行一次的话,就需要在电脑前等待,每次还要修改参数。

    于是python就可以发挥了。

    最开始想着是用linux下的shell脚本编写,但看了看shell的命令,与我而言还不如python方便,于是开始用python编写。

    涉及到的知识点:

    1. 文件路径的读取
    • 在windows下,我们复制路径的话一般是这样的,C:\Windows\System32,但是在python编写时我们要转换成python可以读取的名字,转换过来就是C:/Windows/System32,可以注意到就是把反斜杠符号转换为斜杠,这只是一种方式,还有好几种:
    - path = r"C:\Windows\temp\readme.txt"
    
    - path1 = r"c:\windows\temp\readme.txt"
    
    - path2 = "c:\\windows\\temp\\readme.txt"
    
    - path3 = "c:/windows/temp/readme.txt"
    

    2.字符串的转换
    3.python调用linux系统指令

    • google了一下,python是可以调用linux系统指令的,只需要最开始import os,之后再用os.system(“cmd”)就可以,这里
    1. python调用linux系统指令时参数的传递
    #单参数
    param = 'a single param'
    os.system("This is a %s" % (param))
    #多参数
    param1 = 'parameter1'
    param2 = 'parameter2'
    param3 ='parameter3'
    #假设xxx.py运行需要三个参数
    os.system("python xxx.py %s %s %s" %(param1,param2,param3))
    

    最终的代码:

    # 20180717 By galory  Mail 996377370a@gmail.com
    #This code is processing rat's DTI data 
    import os
    #设置待处理数据的路径
    path = "/brain/zhanjunzhang/Desktop/galory/processing/"
    #读取path路径下的全部文件名
    files = os.listdir(path)
    # s= []
    #cmd = os.system("flirt -in 101b0.gz -ref 104b0.gz -dof 12 -out 101to104 -omat 101to104.mat")
    for file in files:
        file1 = str(file)
        #取文件名的前三个字符用于重命名
        three_str = str(file1[0]+file1[1]+file1[2])
        if file != '104b0.nii.gz':
            # cmd
            print (file)
            #这里os.system()括号内的语句即最开始要在linux命令行输入的语句
            os.system("flirt -in %s -ref 104b0.nii.gz -dof 12 -out %s/%sto104 -omat %s/%sto104.mat" %(file,path,three_str,path,three_str))
    #     os.system('ls')
    # cmd = os.system("flirt -in 101b0.gz -ref 104b0.gz -dof 12 -out 101to104 -omat 101to104.mat")
    # cmd = flirt -in 101b0.gz -ref 104b0.gz -dof 12 -out 101to104 -omat 101to104.mat
    

    第一次认认真真写一个小的脚本简化任务,感觉很满足。先有一个需求,根据需求来想策略,最后一步一步有逻辑地写出来,遇到小问题一个一个解决,最终都会解决。

    Practice makes perfect. 熟能生巧

    Genuine knowledge comes from practice.

    On the way.

    相关文章

      网友评论

        本文标题:Python在linux下批量执行指令

        本文链接:https://www.haomeiwen.com/subject/ukvwpftx.html