On 13-02-2024 23:42, Randy MacLeod wrote:
On 2024-02-13 8:04 a.m., yash.shi...@windriver.com wrote:
From: Yash Shinde<yash.shi...@windriver.com>

The rust oe-selftest output error log doesn't show any information on console 
when it fails.
The following changes emit stderr logs in terminal along with re-directing stdout and 
stderr to "summary.txt" file.

Changes made::
- cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s > summary.txt 
2>&1;" % (builddir, testargs, targetsys)
+ cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s  > summary.txt 
2> >(tee summary.txt >&2);" % (builddir, testargs, targetsys)

summary.txt:                  Redirects the standard output (stdout) of the 
command to a file 'summary.txt'
2> >(tee summary.txt >&2):      Redirects stderr & stdout to summary.txt & 
writes stderr on terminal

The overall effect is that both stdout and stderr are captured in the 
summary.txt file, while stderr still being displayed in the terminal.

Signed-off-by: Yash Shinde<yash.shi...@windriver.com>
---
  meta/lib/oeqa/selftest/cases/rust.py | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meta/lib/oeqa/selftest/cases/rust.py 
b/meta/lib/oeqa/selftest/cases/rust.py
index 164ad11ecd..07f1b5706c 100644
--- a/meta/lib/oeqa/selftest/cases/rust.py
+++ b/meta/lib/oeqa/selftest/cases/rust.py
@@ -213,7 +213,7 @@ class RustSelfTestSystemEmulated(OESelftestTestCase, 
OEPTestResultTestCase):
              cmd = cmd + " export RUST_TARGET_PATH=%s/rust-targets;" % 
rustlibpath
              # Trigger testing.
              cmd = cmd + " export TEST_DEVICE_ADDR=\"%s:12345\";" % qemu.ip
-            cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s > 
summary.txt 2>&1;" % (builddir, testargs, targetsys)
+            cmd = cmd + " cd %s; python3 src/bootstrap/bootstrap.py test %s --target %s  > 
summary.txt 2> >(tee summary.txt >&2);" % (builddir, testargs, targetsys)
              runCmd(cmd)
              end_time = time.time()

Hi Yash,

We talked about this change and decided that it's just too odd a shell pipeline to merge!

Also, it depends on the bash shell as you can tell by pasting:

   #!/bin/sh
   python3 src/bootstrap/bootstrap.py test %s --target %s  > summary.txt 2> >(tee summary.txt >&2);

into https://www.shellcheck.net/ . You'll see the following log and error:

$ shellcheck myscript

Line 2:
python3 src/bootstrap/bootstrap.py test %s --target %s  > summary.txt 2> >(tee summary.txt >&2);                                                           ^-- SC2094 <https://www.shellcheck.net/wiki/SC2094> (info): Make sure not to read and write the same file in the same pipeline. >>                                                                       ^-- SC3001 <https://www.shellcheck.net/wiki/SC3001> (warning): In POSIX sh, process substitution is undefined. >>                                                                             ^-- SC2094 <https://www.shellcheck.net/wiki/SC2094> (info): Make sure not to read and write the same file in the same pipeline.


The YP goal / requirement is to avoid bash dependencies since user may be using dash or some other shell for /bin/sh.


I think that the command is being run locally (not on target), and we are already in a python context so it seems that we would have a simpler solution if we handle the IO redirection from python.

Perhaps Richard or Joshua can recommend some code that you can reference when making this change.

Did you have time to look at the log file handling in runCmd()

https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/utils/commands.py#n168

Please do some analysis and reply here every day or so as  you learn things or have questions.


The runCmd() returns the 'Result' object containing information about the command execution. It has the following attributes:
   result.command = command
   result.status = cmd.status
   result.output = cmd.output
   result.error = cmd.error
   result.pid = cmd.process.pid
https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/utils/commands.py#n198 <https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/utils/commands.py#n198>

I tried to capture the return object value (stderr i.e result.error) and print it to the terminal, but that didn't work as expected. Even I tried to print some debug statements in rust.py file and it also didn't show up in the terminal or in the summary.txt file. I assume there's something in oe-selftest framework that doesn't print statements directly.

Also, I see there's a "output_log <https://git.openembedded.org/openembedded-core/tree/meta/lib/oeqa/utils/commands.py#n198:~:text=%3D0%2C-,output_log%3DNone,-%2C%20**options>" parameter in the runCmd function parameters, which I understand is used to redirect stdout of the command being executed. Currently, I am checking with different values by referring to other oe-selftests and their corresponding behavior with it.

I am checking with some functions and procedures from unittest and subprocess.Popen frameworks to get the error logs:

https://docs.python.org/3/library/unittest.html
https://docs.python.org/3/library/subprocess.html#subprocess.Popen

Regards,
Yash

Thanks,

../Randy



--
# Randy MacLeod
# Wind River Linux
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#195963): 
https://lists.openembedded.org/g/openembedded-core/message/195963
Mute This Topic: https://lists.openembedded.org/mt/104331501/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to