Note: replies inline below, and irrelevant verbiage trimmed. We prefer this format on this list: it makes it easy to respond point by point and makes the reply read like a conversation. Please consider adopting this style here.

Anyway, to your message:

On 06Sep2018 12:09, Roger Lea Scherer <rls...@gmail.com> wrote:
Thank you all for your help. I am still chugging away at this problem. I've
switched to Windows PowerShell Version 5.1 since I can select, copy, and
paste more easily in PowerShell. (I can't figure out how to do that in
Anaconda and I get the same errors in PowerShell.)

I removed the "3" in "python3" and it works; along with moving the "www"
folder to where python resides. Thanks for the help.

Now switch back to python3 and see if it still works, even temporarily. You want to isolate what was the fix and what was irrelevant.

So it appears the local host is running correctly, but when I run this code:

print("Hello World")

Chrome does not render and I get an error message in PowerShell:
127.0.0.1 - - [06/Sep/2018 11:22:46] "GET /cgi-bin/hello.py HTTP/1.1" 200 -
127.0.0.1 - - [06/Sep/2018 11:22:46] command:
C:\Users\Roger\AppData\Local\Programs\Python\Python37-32\python.exe -u
C:\Users\Roger\documents\roger\python\www\cgi-bin\hello.py ""
127.0.0.1 - - [06/Sep/2018 11:22:46] b'  File
"C:\\Users\\Roger\\documents\\roger\\python\\www\\cgi-bin\\hello.py", line
1\r\n    print "<html>"\r\n                 ^\r\nSyntaxError: Missing
parentheses in call to \'print\'. Did you mean print("<html>")?\r\n'
127.0.0.1 - - [06/Sep/2018 11:22:46] CGI script exit status 0x1

I'm guessing you "Hello World" print was after the start of the <HTML> tag. Look at the rrror message you've recited above: it is talking about line 1 of your hello.py file, which has this:

 print "<html>"

That is an old-style print _statement_, which will not work in Python 3. So your other print isn't the source of this error message: likely it is never reached.

Edit your python files to start with this import:

 from __future__ import print_function

That will cause python 2 to expect print to be a function (needing brackets) and not a statement, meaning the same syntax will be required for both python 2 and 3, providing you with consistent behaviour.

Then change the print statement into a print function call:

 print("<html>")

BUT when I run this code:
def fib(n):
   if n < 2:
       return n
   return fib(n-1) + fib(n-2)

print(fib(15))

Note: python 3 print function.

Chrome does not render but I DON'T get an error message, I get this:
127.0.0.1 - - [06/Sep/2018 11:33:30] "GET /cgi-bin/recursive%20fibonacci.py
HTTP/1.1" 200 -
127.0.0.1 - - [06/Sep/2018 11:33:30] command:
C:\Users\Roger\AppData\Local\Programs\Python\Python37-32\python.exe -u
"C:\Users\Roger\documents\roger\python\www\cgi-bin\recursive fibonacci.py"
""
127.0.0.1 - - [06/Sep/2018 11:33:30] CGI script exited OK

There should be more than a bare number in the output. CGI scripts require one to provide HTTP response headers before the body text: that way they can return other stuff than HTML (eg an image or CSV data etc). Try putting these print calls at the start of that script:

 print('Content-Type: text/html')
 print()

which mark the rest of the script output as HTML and then provide a blank line to indicate the end of the headers. The objective is that your script produces this output:

 Content-Type: text/html

 325

That's a made up number, I haven't bothered to compute fib(15), sorry.

So I'm confused about 2 things:
1. Why does the one file cause an error in PowerShell (and Anaconda
actually) when it seems to be the same as the other file which appears to
run with no error, but just not render? and,

Because you're running the file with Python 2 by hand and Python 3 from the web server (see the "Python\Python37-32\python.exe" in the log?) Apply the suggested __future__ import and you'll get consistent behaviour.

2. What am I missing: why won't it render since the instructions I have at
the very beginning of this email say, basically, this is all I have to do
to get it to render?

I know this second question is maybe a little bit outside this forum, but I
am struggling to make sense out of what little I know and, truly, this
forum seems the nicest and most helpful I've encountered.

The output of a CGI script should be a valid HTTP response: you need some HTTP headers describing the output format and _then_ the core programme output. The minimal header is a Content-Type: header to denote the program result format. See above for how to stick one at the top of any of your CGI scripts.

Cheers,
Cameron Simpson <c...@cskk.id.au>
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to