Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Utility to handle pylint exit codes on Linux in a scripting-friendly way.
Pylint uses bit-encoded exit codes to convey the results of the pylint review, which means it will return with a non-zero return code even when the pylint scoring was successful.
This can make it difficult to script the execution of pylint while at the same time detecting genuine errors.
pylint-exit
is a small command-line utility that can be used to re-process
the pylint return code and translate it into a scripting-friendly return code.
pylint-exit
will decode the bit-encoded return code, identify whether there were
any fatal messages issued (which might constitute a failure in the execution of
pylint), or a usage error, and return a 0
or 1
return code that is more easily
used in shell scripts.
The simplest way to install is via pip
.
pip install pylint-exit
This will install the package, and will provide the pylint-exit
command line utility.
You can also manually install by downloading pylint_exit.py
, and make it executable.
curl -o pylint-exit https://raw.githubusercontent.com/jongracecox/pylint-exit/master/pylint_exit.py && chmod +x pylint_exit.py
You should also consider creating a symbolic link so that the calls in the remainder of this
README work as described. Update <path-to>
with where you downloaded the script.
ln -s <path-to>/pylint_exit.py /usr/local/bin/pylint-exit
Note: If you perform a --user
install with pip
then you will need to ensure ~/.local/bin
appears in your PATH
environment variable, otherwise the command line pylint-exit
will not work.
Add || pylint-exit $?
to the end of your existing Pylint command. You can then
use the updated $?
return code in your shell script.
pylint mymodule.py || pylint-exit $?
if [ $? -ne 0 ]; then
echo "An error occurred while running pylint." >&2
exit 1
fi
Note: Many CI tools will check the return code of each command, so it may be enough to
simply add || pylint-exit $?
, and leave the return code check to the CI executor.
You can also use the python code directly if needed:
pylint mymodule.py || python pylint_exit.py $?
Pylint can return combinations of the following codes. pylint-exit
will identify each
issued message, and return the maximum final return code.
Pylint code | Message | Final return code |
---|---|---|
1 | Fatal message issued | 1 |
2 | Error message issued | 0 |
4 | Warning message issued | 0 |
8 | Refactor message issued | 0 |
16 | Convention message issued | 0 |
32 | Usage error | 1 |
This list is stored in exit_codes_list
, which can be customised if needed.
You can control what is considered a failure using the following command line arguments. By default these types of messages don't cause a non-zero return code. Adding any of these arguments will trigger a non-zero return code when those types of message are raised.
Name | Meaning |
---|---|
-efail , --error-fail | Fail on issued error messages. |
-wfail , --warn-fail | Fail on issued warning messages. |
-rfail , --refactor-fail | Fail on issued refactor messages. |
-cfail , --convention-fail | Fail on issued convension messages. |
In this example pylint issues refactor and convention messages, and exits with a
return code of 24. pylint-exit
decodes this, displays the messages, and exits
with a return code of 0.
> pylint --rcfile=.pylintrc --output-format=text mymodule.py || pylint-exit $?
The following messages were raised:
- refactor message issued
- convention message issued
No fatal messages detected. Exiting gracefully...
> echo $?
0
In this example pylint returns with a usage error due to the bad output format, and
exits with a return code of 32. pylint-exit
detects this, displays the message, and
returns with an exit code of 1.
> pylint --rcfile=.pylintrc --output-format=badformat mymodule.py || pylint-exit $?
The following messages were raised:
- usage error
Fatal messages detected. Failing...
> echo $?
1
In this example we will use the --error-fail
and --warn-fail
command line arguments
to cause pylint-exit to treat errors and warnings as serious enough to return a non-zero
return code.
In the example scenario pylint issues error and warning messages, and exits with a
return code of 6. pylint-exit
decodes this, displays the messages, and exits
with a return code of 1 because the error and warning messages are now considered as
fatal.
> pylint --rcfile=.pylintrc --output-format=badformat mymodule.py || pylint-exit --error-fail --warn-fail $?
The following messages were raised:
- error message issued
- warning message issued
Fatal messages detected. Failing...
> echo $?
1
You can test how pylint-exit will react to various return codes using the following command:
(exit 6) || pylint-exit $?
or if you are using the python code directly:
(exit 6) || python pylint_exit.py $?
FAQs
Exit code handler for pylint command line utility.
We found that pylint-exit demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.