Unable to run % python help(sys) in zsh on MacOS - python

I'm going through free Google Python training course. Real basic stuff. My OS is MacOS. Using MacOS Terminal. I can run python modules like hello.py.
I can run this to see my version:
% python --version
Python 3.9.12
However, this fails:
% python help(sys)
zsh: unknown file attribute: y
What do I need to change in my setup to resolve and be able to call simple help in Python?

Parentheses have a special meaning in zsh, so they must be escaped here to pass the argument as-is to Python. You can use \ in front of the parentheses (python help\(sys\)), but it's conventional to just quote the entire argument:
python 'help(sys)'
However, this still won't work (because the python command interprets it as a filename), you need to pass code via the -c flag to Python:
python -c 'help(sys)'
And that still won't work since you haven't loaded the sys package in that code. Do that, to get working code:
python -c 'import sys; help(sys)'

Konrad is right, but you are likely looking for a way to start Python interactive shell and execute statements there.
% python
Python 3.10.7 (main, Sep 15 2022, 01:52:03) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> help(sys)

Related

Visual studio code: ignore leading ">>>" in python examples

In VS Code, is there any way to run a Python source line in terminal (shift+Enter), ignore leading >>>?
I heard some other editors have such functionality as one of their built-in features (e.g., IPython). In the case of VS Code, do you have any suggestions for set-ups or extensions?
I think what you mean is ti run it in interactive mode, correct me if I am wrong.
CTRL + SHIFT + T and then type
run current file in interactive window.
When you shift+Enter in your python script, VSCode deliver your line to the terminal which run python in interactive mode. It means, removing leading prompt string is not the matter of VSCode, but the terminal or python program itself.
The leading prompt string(>>> and ...) is defined in sys package. If you want to remove it, try this:
Python 3.7.4 (default, Aug 13 2019, 15:17:50)
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.ps1, sys.ps2 = '', ''
ps. I still can't find the way to configure this as default setting in VSCode.

Python2.7 - Interpreter syntax error after installing Python3

When I'm trying to write anything on the python27 interpreter, I'm getting syntax error, no matter what I'm typing (Not just print, literally anything). Couldn't find anyone else experiencing the same issue, so no clue why this is happening.
I've recently installed Python3 and PyCharm, but I still want to use python27 for some legacy code I have. The problem started to happen after I installed Python3 and PyCharm (Not sure if PyCharm may be related or not).
my OS is Windows10 x64.
Any ideas anyone?
Python27:
Python3:
I can reproduce this perfectly by using a non-break space unicode character as the last character:
Python 2.7.16 (default, Apr 11 2019, 01:11:37)
[GCC 4.2.1 Compatible FreeBSD Clang 6.0.0 (tags/RELEASE_600/final 326565)] on freebsd11
Type "help", "copyright", "credits" or "license" for more information.
>>> print "Test" 
File "<stdin>", line 1
print "Test" 
^
SyntaxError: invalid syntax
>>> import os 
File "<stdin>", line 1
import os 
^
SyntaxError: invalid syntax
>>> 111 
File "<stdin>", line 1
111 
^
SyntaxError: invalid syntax
>>>
When I copy/paste that into IPython based on python 3, it shows up:
In [1]: test = 'print "Test" '
Out[1]: 'print "Test"\xa0'
In [2]: import unicodedata
In [3]: unicodedata.name(test[-1])
Out[3]: 'NO-BREAK SPACE'
I expect the same to happen with any space-like unicode character.
When typing code into Python, use End to go to the end of the line, and then one or more Backspace to remove any extra whitespace, before you press Enter. If your cursor moves when you press End, that would confirm the issue.
If not, then maybe it is whatever the terminal program sends to Python when you press Enter.
I would advise to just remove python 2.7 and port any remaining 2.7 specific code to python 3.
Edit Since you still need Python 2, I would suggest to try running a python 2 script. If that works, the problem is probably with the terminal setup (like text encoding, line feed etc.) being different than what Python 2 expects. If scripts work, try one of the many different terminal programs available for ms-windows.

"SyntaxError: Invalid Syntax" when trying to run a .py script from IDLE in Command Prompt

I just started learning python. I created a simple .py file using the IDLE editor and I am trying to run it from the command prompt. However, every time it keeps giving me the "SyntaxError: Invalid Syntax" message.
This is how the .py file looks when opened with notepad:
Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import sys
>>> print(sys.platform)
win32
>>> x="Spam!"
>>> print(x*8)
Spam!Spam!Spam!Spam!Spam!Spam!Spam!Spam!
>>> print(2**100)
1267650600228229401496703205376
>>>
And this is what I type in the cmd:
C:\code\script1.py
Assistance would be appreciated.
That's not a Python program, it's the log of an interactive (command prompt) session.
Instead, try entering the following in any text editor (e.g. notepad, notepad++), save it as C:\code\script2.py and then run it as you did:
import sys
print(sys.platform)
x="Spam!"
print(x*8)
print(2**100)
[EDIT]
If you want to use Idle for this, click [File][New] to create a Python source code file, type in the above, save it and then run it as you did.
[EDIT2]
Idle is and example of an Interactive Development Environment (IDE). Since you're new to programming: IDE's tend to obscure what's going on, although Idle isn't a severe case of this. So using a separate editor and running from the command line as you did is actually a good way to familiarize yourself with what's going on under the hood. This will pay off in many ways in the long run.
As said before; This is not a python file...
Python 2.7.10 (default, Feb 7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
That's the shell (which you get if you just type: python) where you can type commands like:
fruits = ["apple", "banana", "cherry"]
for x in fruits:
print(x)
and this will instantly execute...
What you need to to is go on and create a script.py file, write your stuff in there and then execute it as: python script.py
Greeting Elias

What exactly does Spyder do to Unicode strings?

Running Python in a standard GNU terminal emulator on Ubuntu 14.04, I get the expected behavior when typing interactively:
>>> len('tiθ')
4
>>> len(u'tiθ')
3
The same thing happens when running an explicitly utf8-encoded script in Spyder:
# -*- coding: utf-8 -*-
print(len('tiθ'))
print(len(u'tiθ'))
...gives the following output, regardless of whether I run it in a new dedicated interpreter, or run in a Spyder-default interpreter (shown here):
>>> runfile('/home/dan/Desktop/mwe.py', wdir=r'/home/dan/Desktop')
4
3
But when typing interactively in a Python console within Spyder:
>>> len('tiθ')
4
>>> len(u'tiθ')
4
This issue has been brought up elsewhere, but that question regards differences between Windows and Linux. Here, I'm getting different results in different consoles on the same system, and the Python startup message in the terminal emulator and in the console within Spyder are identical:
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
What is going on here, and how can I get Python-within-Spyder to behave like Python-in-the-shell with regard to unicode strings? #martijn-pieters makes the comment on this question that
Spyder does all sorts of things to break normal a Python environment.
But I'm hoping there's a way to un-break this particular feature, since it makes it really hard to debug scripts in the IDE when I can't rely on my interactive typed commands to yield the same results as scripts run as a whole with their coding: utf-8 declaration.
UPDATES
In the GNU terminal:
>>> repr(u'tiθ')
"u'ti\\u03b8'"
>>> import sys
>>> sys.stdin.encoding
'UTF-8'
>>> sys.getdefaultencoding()
'ascii'
In Spyder console:
>>> repr(u'tiθ')
"u'ti\\xce\\xb8'"
>>> import sys
>>> sys.stdin.encoding # returns None
>>> sys.getdefaultencoding()
'UTF-8'
So knowing that, can I convince Spyder to behave like the GNU terminal?
After a bit of research, it seems that the strange behavior is at least in part built into Python (see this discussion thread; briefly, Python sets sys.stdin.encoding to None as default, and only changes it if it detects that the host is tty and it can detect the tty's encoding).
That said, a hackish workaround was just to tell Spyder to use /usr/bin/python3 as its executable instead of the default (which was Python 2.7.6). When running a Python 3 console within Spyder or within a GNU terminal emulator, I get results different (better!) than before, but importantly the results are consistent, regardless of whether running a script or typing interactively, and regardless of using GNU terminal or Spyder console:
>>> len('tiθ')
3
>>> len(u'tiθ')
3
>>> import sys
>>> sys.stdin.encoding
'UTF-8'
>>> sys.getdefaultencoding()
'utf-8'
This leads to other problems within Spyder, however: its sitecustomize.py script is not Python 3 friendly, for example, so every new interpreter starts with
Error in sitecustomize; set PYTHONVERBOSE for traceback:
SyntaxError: invalid syntax (sitecustomize.py, line 432)
The interpreter seems to work okay anyway, but it makes me nervous enough that I'm not considering this an "acceptable" answer, so if anyone else has a better idea...

Why is Python 3.1.3 in the header listed as a syntax error?

I'm a newbie programmer so I'll do my best to clearly ask my question. I'm running Python scripts in Mac 10.6.5 and now trying to write and save to a text file (following instructions in HeadsUp Python book). Whenever I hit function+F5 (as instructed) I get the same "invalid syntax" error and Idle highlights the "1" in "Python 3.1.3" of the header. Here's the header to which I'm referring:
Python 3.1.3 (r313:86882M, Nov 30 2010, 09:55:56) [GCC 4.0.1 (Apple Inc. build 5494)] on darwin Type "copyright", "credits" or "license()" for more information.
Extremely frustrating. I've checked and rechecked the code but this doesn't seem to be code related because the "syntax error" is in regards to the header text that posts in every Idle/Python session. Help anyone?
... and Idle highlights the "1" in "Python 3.1.3" of the header ...
Standalone Python scripts used to contain a "header", but that would be just
#!/usr/bin/env python
or, depending on the name of the interpreter maybe
#!/usr/bin/env python3.1
Not sure I understand your question, though.
you are writing your script in the wrong IDLE window ! when starting IDLE, it opens 2 windows: one for writing a script and another one with an interactive python shell. executing the content of the interactive python shell makes no sense.
#squashua: I have the same issue when I try to run the code either in IDLE or Ubuntu terminal.
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25)
it highlights "5" as syntax error.

Categories