Re: Capturing a Return Code?

Jeff Allen <[email protected]> Tue, 14 Aug 2018 07:17:31 +0100
Newsgroups gmane.comp.lang.jython.user
Message-ID <[email protected]>
Hi Peter:

 From here it is a question of zeroing-in on the boundary between what 
works and what doesn't -- the usual debugging process.

Does my simple example work for you, with the simple script?

If even that fails for you, ask what powershell may be doing at 
start-up. It loads libraries from various default places. Maybe that 
hangs. There is a -NoProfile option to suppress some of it. And a 
-NonInteractive (?) I think probably simplifies i/o. You can look up the 
options.

If the simple script works, then it seems to be something about your 
script. It is obviously more complicated than mine. If you start from my 
simple script and introduce your own by parts, where does it start to hang?

You want to capture the output, but the way you show stdout captured is 
not what we see in the documentation (use PIPE). There are also warnings 
that when doing so, deadlock is possible but communicate() is a good 
choice. It seems to include the wait(). Here is a version of my example 
that captures the output:

==> script.py <==

import subprocess
p = subprocess.Popen(['powershell.exe', '-File', '.\\script.ps1'],
                      stdout=subprocess.PIPE, stderr=subprocess.PIPE)
r = p.communicate()
print "stdout =", repr(r[0])
print "stderr =", repr(r[1])
print "exit status =", p.returncode

I am using repr() in the output to make visible non-printing or 
non-ascii characters (bytes really) that may be a source of problems.

PS here> java -jar "C:\Jython\2.7.1-sa\jython-standalone-2.7.1.jar" script.py
stdout = 'Hello World!\r\n'
stderr = ''
exit status = 1234

Lastly, all this may equally be run under C Python, in case you suspect 
a divergence or broken installation. (Jython has to work hard to conceal 
various differences between Java Process API and the system call. Or 
maybe your library is bad.) It worked for me under IDLE.

Jeff

Jeff Allen

On 14/08/2018 00:32, pr144 wrote:
>
> The problem is I can see the powershell is executing a Windows task, 
> but control never returns back to the calling Jython script..even 
> after the task is complete.
>
> So Jython is never getting to p.returncode..
>
> Seems like it's stuck on the p.wait() line...
>
>
>
> On 8/13/2018 6:25 PM, Jeff Allen wro
>>
>> ==> script.ps1 <==
>> echo "Hello World!"
>> Exit 1234
>>
>> ==> script.py <==
>> import subprocess
>> p = subprocess.Popen(['powershell.exe', '-File', '.\\script.ps1'])
>> p.wait()
>> print "exit status =", p.returncode
>>
>> ==============
>>
>> The p.wait() is important: 
>> https://docs.python.org/2/library/subprocess.html?highlight=check_output#subprocess.Popen.wait
>>
>> Now ...
>>
>> PS here> java -jar "C:\Jython\2.7.1-sa\jython-standalone-2.7.1.jar" 
>> script.py
>> Hello World!
>> exit status = 1234
>>
>>
>> Jeff Allen
>> On 13/08/2018 18:20, Peter O'Reilly via Jython-users wrote:
>>> Error says,
>>>   AttributeError: 'module' objects\ has no attribute 'check_output'
>>>
>>> I need the  \return code from this line,
>>> pipe = subprocess.Popen(['powershell.exe', 
>>> 'MY_SCRIPT.ps1',stdout=sys.stdout]
>>>
>>>
>>>
>>>
>>> Peter
>>>
>>>
>>
> -- 
> Thank you,
> Peter O'Reilly

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot

_______________________________________________
Jython-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jython-users