从python调用后,不间断地运行tcsh脚本

时间:2015-03-22 19:50:16

标签: python subprocess tcsh

我在python程序中调用了一个tcsh脚本。 tcsh脚本需要10-12分钟才能完成。但是当我从python调用这个脚本时,python会在完全执行之前中断脚本。这是代码片段。

import subprocess
import os
os.chdir(dir_path_forCD)
subprocess.call('/home/sdcme/bin/nii_mdir_sdcme %s %s' % (a, a), shell=True)
print(a+1);

有人可以指出,如何在不完全执行脚本之前从python中调用nii_mdir_sdcme脚本而不中断(查杀)脚本。

完整的脚本如下:

#!/usr/bin/python
import subprocess
import os
import dicom
import time

dire = '.'
directories = subprocess.check_output(
    ['find', '/Users/sdb99/Desktop/dicom', '-maxdepth', '1', '-type', 'd', '-mmin', '-660', '-type', 'd', '-mmin', '+5']
).splitlines()
number_of_directories = len(directories)
b_new = '.'
for n in range(1,number_of_directories):
    dire_str = (directories[n])
    dire_str = str(dire_str)    #[2:-1]
    print(dire_str)
    for dirpath,dirnames,filenames in os.walk(dire_str,topdown=True):
        a =1
        for filename in filenames:
            print(dirpath)

            if filename[-4:] == '.dcm':
                firstfilename = os.path.join(dirpath, filename)
                dir_path_forCD= dirpath
                dcm_info = dicom.read_file(firstfilename, force=True)
                if dcm_info[0x0019, 0x109c].value == 'epiRTme':
                    os.chdir(dir_path_forCD)
                    subprocess.call('/home/sdcme/bin/nii_mdir_sdcme %s %s' % (a, a), shell=True)
                    print(a+1);

                break
             break
    break

tcsh script:nii_mdir_sdcme

#!/bin/tcsh
if ($#argv < 2) then
  echo "Usage: nii_mdir_sdcme start_dir# end_dir#"
  exit
else    
 set start = $argv[1]
 set end = $argv[2]

  if ( ! -d ./medata ) then
   sudo mkdir ./medata
 endif
 sudo chown sdcme ./medata
 sudo chgrp users ./medata

 set i = $start
 while ( $i <= $end )
   echo " "
   if ( $i < 10 ) then
     echo "Entering 000$i..."
     cd 000$i
     sudo chmod 777 .
     niidicom_sdcme run0$i
     #mv *+orig.* ../medata
     sudo chmod 755 .
   else
     echo "Entering 00$i..."
     cd 00$i
     sudo chmod 777 .
     niidicom_sdcme run$i
     #mv *+orig.* ../medata
     sudo chmod 755 .
   endif

   cd ..

   @ i++  
 end

endif

1 个答案:

答案 0 :(得分:0)

问题在于计数器a,我传递给调用tcsh脚本。

现在看来,问题始终是python中断tcsh脚本。 subprocess让tcsh脚本在不中断shell = True的情况下运行。