New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
gh-116622: Redirect stdout and stderr to system log when embedded in an Android app #118063
Conversation
@serhiy-storchaka: This PR is connected to the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you!
This looks good to me, modulo a few small nitpicks. I'll let @serhiy-storchaka resolve the conversations he started.
Lib/test/test_android.py
Outdated
|
||
def tearDown(self): | ||
self.logcat_process.terminate() | ||
self.logcat_process.wait(0.1) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
Lib/test/test_android.py
Outdated
|
||
# Long lines are split into blocks of 1000 *characters*, but | ||
# TextIOWrapper should then join them back together as much as | ||
# possible without exceeding 4000 UTF-8 *bytes*. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's leave a breadcrumb here:
# possible without exceeding 4000 UTF-8 *bytes*. | |
# possible without exceeding MAX_BYTES_PER_WRITE (4000) UTF-8 *bytes*. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for addressing my comments. LGTM in general. I left several minor suggestions, but they are not mandatory, you can implement or reject them on case by case base.
In any case I'm going to merge this PR after your answer.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Using the tooling and instructions in #117878, I've confirmed that this works for the test suite:
|
||
|
||
static PyMethodDef android_log_write_method = { | ||
"android_log_write", android_log_write_impl, METH_VARARGS |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would it be possible to use METH_FASTCALL?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can replace PyArg_ParseTuple() with _PyArg_ParseStack().
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I do not think that it will make significant difference in this case. It is better to use the stable public API.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree: this isn't a performance-critical area.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, let's go with VARARGS.
Co-authored-by: Victor Stinner <vstinner@python.org>
Merged. Let's see how it goes. It can be adjusted later if needed. Nice change @mhsmith. |
…ed in an Android app (python#118063)
…ed in an Android app (python#118063)
When embedded in an app on current versions of Android, there's no easy way to monitor the process's stdout and stderr. So, as specified in PEP 738, this PR redirects them to the system log, which can be viewed using the developer tools.