Skip to main content

I have a SystemCaller that simply deletes a file. I would assume if the deletion is successful, it would give code 0, otherwise 1. However, it always gives 0 whether the deletion is successful or not (for example, I keep the file open before hand to cause the deletion to fail). Any workaround? I could use PythonCaller to do the deletion and generate an exit code, but would be nice just do this simple operation in the SystemCaller.

Which command are you using in the SystemCaller? If you're using "del", that command always return 0, which is what the SystemCaller will return as well.

See the documentation: https://ss64.com/nt/del.html

Errorlevels: DEL will return an Errorlevel of 0, irrespective if the delete succeeds or fails for any reason.


Try PythonCaller using the follwing script:

import fme
import fmeobjects
import os

def killFile(feature):
    try:
        os.remove("e:\\data\\temp\\test.txt")
        stat = 0
    except WindowsError:
        stat = 1
    
    feature.setAttribute ('stat', stat)
    pass

When called, after execution the feature would contain an attribute stat having value of 0 (succeed) or 1 (failed) depending if the delete operation deleted the file.

0684Q00000ArL57QAF.png


Which command are you using in the SystemCaller? If you're using "del", that command always return 0, which is what the SystemCaller will return as well.

See the documentation: https://ss64.com/nt/del.html

Errorlevels: DEL will return an Errorlevel of 0, irrespective if the delete succeeds or fails for any reason.

I see. Yes I use del command. Will change to use PythonCaller then.

 

 


Try PythonCaller using the follwing script:

import fme
import fmeobjects
import os

def killFile(feature):
    try:
        os.remove("e:\\data\\temp\\test.txt")
        stat = 0
    except WindowsError:
        stat = 1
    
    feature.setAttribute ('stat', stat)
    pass

When called, after execution the feature would contain an attribute stat having value of 0 (succeed) or 1 (failed) depending if the delete operation deleted the file.

0684Q00000ArL57QAF.png

@helmoet. Thanks for the handy code. That is what I need when the systemCaller does not return failure code for "del file" command.

 


Which command are you using in the SystemCaller? If you're using "del", that command always return 0, which is what the SystemCaller will return as well.

See the documentation: https://ss64.com/nt/del.html

Errorlevels: DEL will return an Errorlevel of 0, irrespective if the delete succeeds or fails for any reason.

Funny... my SystemCaller with a del command always returns 1... and always seems to fail deleting the file.

 

 


Funny... my SystemCaller with a del command always returns 1... and always seems to fail deleting the file.

 

 

The del command may set errorlevel to 1 if you have specified an invalid switch, e.g. "/X". That's the only scenario (that I know of) where del will set the errorlevel to anything else than 0.
The del command may set errorlevel to 1 if you have specified an invalid switch, e.g. "/X". That's the only scenario (that I know of) where del will set the errorlevel to anything else than 0.
I'm not going to bother with it to be honest, it turns out @helmoet's Python script does the trick just fine and is a much more elegant solution that what I was cobbling together (SystemCaller / FileExistenceChecker)

 


I'm not going to bother with it to be honest, it turns out @helmoet's Python script does the trick just fine and is a much more elegant solution that what I was cobbling together (SystemCaller / FileExistenceChecker)

 

I agree 🙂

Reply