Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
How to capture stdout
Message
From
23/11/2006 14:17:40
Dragan Nedeljkovich (Online)
Now officially retired
Zrenjanin, Serbia
 
 
To
23/11/2006 12:31:47
General information
Forum:
Visual FoxPro
Category:
Windows API functions
Environment versions
Visual FoxPro:
VFP 9 SP1
Miscellaneous
Thread ID:
01171891
Message ID:
01172110
Views:
20
>>>>I use API_APPRUN class to run pg_dump.exe file
>>>>
>>>>I need to show the messages from it after it finishes.
>>>>
>>>>How to capture standard output and redirect it to file ?

>>>
>>>How about?
>>>
>>>pg_dump.exe > log.txt
>>>
>>>then you inspect log.txt?
>>
>>And in case we need to capture stderr as well, here's a neat trick I already forgot twice, and had to google it out again:
>>
>>pg_dump.exe > log.txt 2>err.txt
>
>Thank you.
>I forget to mention that I need need also:
>
>1. Pass PGPASSWORD= environment variable to pg_dump (this seems to be the only way to pass password to pg_dump non-interactively). I modified APP_APPRUN to allow passing environment variables.
>
>2. Capture exit code returned by pg_dump.exe to know that backup was completed OK.
>
>How to implement those features ?

To set an environment variable, you should wrap your call in a batch file:
text to lcBatText textmerge noshow
set pgpassword=<<lcPass>>
"<<fullpath("pg_dump.exe")>>"
endtext
lcHere=fullpath(set("directory"))
lcBat=fullpath("tmp.bat")
strtofile(lcBatText, lcBat)
oprocess=Newobject('api_apprun','process', '', lcbat, lcHere, 'HID')
oprocess.LaunchAppAndWait()
To check the exit code (I presume that's same as ErrorLevel), you can try to use oProcess.CheckProcessExitCode(nHandle). There's no actual example in the class itself, but you can tweak the class code to add a line which would assign this exitcode into a custom property of oProcess before exiting.

The trouble here is that with the batch file, the batch is your process, not the exe, so you may get perfect zeros all the time. If you managed to set the environment variable without a batch file, you can then run CheckProcessExitCode() before you kill oProcess and retrieve the exit code. If you need to use the batch, it's then as simple as adding another line to the batch:
text to lcBatText textmerge noshow
set pgpassword=<<lcPass>>
"<<fullpath("pg_dump.exe")>>"
echo %errorlevel% >errorlevel.txt
endtext
And then you just use

nErrorLevel=val(filetostr("errorlevel.txt"))

to get its value.

back to same old

the first online autobiography, unfinished by design
What, me reckless? I'm full of recks!
Balkans, eh? Count them.
Previous
Reply
Map
View

Click here to load this message in the networking platform