Python脚本独立工作,但不在crontab中



我有一个python脚本,它调用bash脚本来获取在过去一小时内创建的所有新目录的列表。Python脚本可执行

    #!/usr/bin/python
import subprocess
import os
import dicom
import time
dire = '.'
directories = subprocess.check_output(
        ['find', '/dicom', '-maxdepth', '1', '-type', 'd', '-mmin', '-120', '-type', 'd', '-mmin', '+5']
).splitlines()
number_of_directories = len(directories)
b_new = 0
for n in range(1,number_of_directories):
    dire_str = str(directories[n])
    #dire_str = str(dire_str)
    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)
                dcm_info = dicom.read_file(firstfilename, force=True)
                if dcm_info[0x0019, 0x109c].value == 'epiRTme':
                    dirpath_nii = dirpath[:-4]
            a = dirpath[-3:]
            a = int(a)
            os.chdir(dirpath_nii)
                    subprocess.call('/home/sdcme/bin/nii_mdir_sdcme %s %s' % (a, a), shell=True)
                break
            break

显然,如果我在命令提示符上单独调用这个python脚本,它工作得很好,但是当我将它设置为在crontab上运行60分钟后,脚本会抛出以下错误:

Traceback (most recent call last):
  File "/home/sdcme/Final_concat_sdcme.py", line 9, in <module>
    ['find', '/dicom', '-maxdepth', '1', '-type', 'd', '-mmin', '-120', '-type', 'd', '-mmin', '+5']
  File "/usr/lib64/python2.7/subprocess.py", line 530, in check_output
    process = Popen(stdout=PIPE, *popenargs, **kwargs)
  File "/usr/lib64/python2.7/subprocess.py", line 672, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1201, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
~    

Crontab脚本

*/59 * * * * Final_concat_sdcme.py &>~concatenation.log
谁能指出这里的问题是什么?谢谢你的帮助。

编辑:

Cron输出LOG Error:

niidicom_sdcme: Command not found.
niidicom_sdcme: Command not found.
niidicom_sdcme: Command not found.
niidicom_sdcme: Command not found.
niidicom_sdcme: Command not found.
niidicom_sdcme: Command not found.

实际上我的python脚本调用nii_mdir_sdcme脚本调用niidicom_sdcme。当我在终端上独立运行上述脚本时,没有错误,但是当cron作业调用上述脚本->nii_mdir_sdcme->niidicom_sdcme时,似乎有问题。

恐怕您正在用不包含find命令的路径重写$PATH,对吗?

下面的语句可能效果更好:

directories = subprocess.check_output(
        ['/usr/bin/find', '/dicom', '-maxdepth', '1', '-type', 'd', '-mmin', '-120', '-type', 'd', '-mmin', '+5']
).splitlines()

最新更新