Skip to main content
Solved

why SystemCaller does not give correct exit code?

  • December 13, 2017
  • 8 replies
  • 97 views

aguan
Contributor
Forum|alt.badge.img+11
  • Contributor

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.

Best answer by helmoet

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

View original
Did this help you find an answer to your question?

8 replies

david_r
Celebrity
  • December 13, 2017

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.


helmoet
Forum|alt.badge.img+8
  • Best Answer
  • December 13, 2017

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


aguan
Contributor
Forum|alt.badge.img+11
  • Author
  • Contributor
  • December 13, 2017
david_r wrote:

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.

 

 


aguan
Contributor
Forum|alt.badge.img+11
  • Author
  • Contributor
  • December 13, 2017
helmoet wrote:

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.

 


redgeographics
Celebrity
Forum|alt.badge.img+50
david_r wrote:

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.

 

 


david_r
Celebrity
  • March 28, 2018
redgeographics wrote:
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.

redgeographics
Celebrity
Forum|alt.badge.img+50
david_r wrote:
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)

 


david_r
Celebrity
  • March 28, 2018
redgeographics wrote:
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 :-)

Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings