pidcat: `pidcat` installed via `brew` no longer works on macOS 12.3, due to Python 2 having been removed

Hey!

First off, thank you for the great util, Jake. And all the other cool stuff you’ve built througout the years.

I’m having an issue where pidcat, installed from brew, can no longer run on macOS 12.3. I believe this is because of Python 2 having been removed on this version of macOS.

I’m getting the following output, when attempting to run pidcat:

~ pidcat
zsh: /opt/homebrew/bin/pidcat: bad interpreter: /usr/bin/python: no such file or directory

This in turn is caused by https://github.com/JakeWharton/pidcat/blob/44b4a106bb25776cbb551044b303520a07a51c1e/pidcat.py#L1:

#!/usr/bin/python -u

On macOS 12.3, /usr/bin/python does not exist - only /usr/bin/python3.

Running on the latest development version (as listed in the current README.md, does not solve the issue, as it still looks for python, which still does not exist.

One alternative that could resolve the issue would be to update pidcat to explicitly try to use python3, but this would have some less desirable backwards compatibility issues, perhaps.

About this issue

  • Original URL
  • State: open
  • Created 2 years ago
  • Reactions: 40
  • Comments: 19

Most upvoted comments

I was able to fix it with following steps:

# Use pyenv to install python2 with:
brew install pyenv
pyenv install 2.7.18
 
# Optionally set it to your global default:
pyenv global 2.7.18
 
# Create Alias in .zshrc
alias python=/Users/<user>/.pyenv/versions/2.7.18/bin/python
 
# Reload shell and test
source .zshrc
python -V

# Edit shebang line of Pidcat script
sudo nano "$(which pidcat)"

# Replace first line:
#!/Users/<user>/.pyenv/versions/2.7.18/bin/python -u

Simply symlinking python to python3 isn’t a good idea. First of all, it is not “simple” on macOS due to SIP since OS X 10.11. Secondly, it might produce confusion and unexpected results on other ends (e.g. Python things that expect python to be Python 2).

The real solution would be to fully depend Pidcat on Python 3. It’s also about time, since Python 2 has long-since reached end of life.

If anyone still read this; I’m not sure how come this still remains open. But both of the issues are fixed by changing:

  • The first line, to: #!/usr/bin/env -S python3 -u
  • The last line, to: print(linebuf)

The broken color output apparently came from the attempt to convert line buffer to utf8.

I got the same error on my Apple M1.

I installed pidcat 2.1.0 via homebrew and python 3.8 by miniconda.

The error is caused by the first line of local pidcat file(path: /opt/homebrew/Cellar/pidcat/2.1.0/bin/pidcat):

#!/usr/bin/python -u

I just replaced it with: #!/usr/bin/env -S python -u, according to the latest version: https://github.com/JakeWharton/pidcat/blob/61cd1ee1beabfa14eb5fbe21eb90c192d96aebc5/pidcat.py#L1

Don’t forget to add write permission to the local pidcat file:

chmod +w /opt/homebrew/Cellar/pidcat/2.1.0/bin/pidcat

Hi @brAzzi64! Did you manage to solve this colors issue?

[EDIT] Just found it! 😃

I tried installing the latest from master (brew install --HEAD pidcat), verified that the first line of the script is:

#!/usr/bin/env -S python -u

But I still get an error: env: python: No such file or directory when running it.

If I try changing the python in #!/usr/bin/env -S python -u by python3, pidcat runs, but instead of colors, I get lines in the shape of:

b'\x1b[33m GestureDetector\x1b[0m \x1b[30;102m I \x1b[0m obtain mCurrentMotionEventRaw. action: 2 id: 629418386'

Any hints?

The fix applied in #179 makes pidcat work with Python 3. Should that PR be merged, consumers of the script could simply symlink python to python3.

This might be fixed in #179. It also should fix #178.

I tried installing the latest from master (brew install --HEAD pidcat), verified that the first line of the script is:

#!/usr/bin/env -S python -u

But I still get an error: env: python: No such file or directory when running it.

If I try changing the python in #!/usr/bin/env -S python -u by python3, pidcat runs, but instead of colors, I get lines in the shape of:

b'\x1b[33m GestureDetector\x1b[0m \x1b[30;102m I \x1b[0m obtain mCurrentMotionEventRaw. action: 2 id: 629418386'

Any hints?