Hello, searched all over but no success. I want to have a script
output HTML if run in a browser and plain text if run in a Terminal.
In Python 2, I just said this:
if len(sys.argv)==True:
That line doesn't make sense really as it is practically equivalent to:
if len(sys.argv) == 1:
Which, since argv always contains at least 1 element (the program's
name), is essentially checking whether /no/ arguments were passed on
the command line.
Recall that issubclass(bool, int) is true and that True == 1 in Python
due to details of said subclassing.
Note also that "== True" is almost always unnecessary as it is
essentially implicit in the "if".
I suspect you instead meant to write:
if len(sys.argv) > 0:
which for the record can be written more idiomatically as:
if sys.argv: # bool(some_list) is True if some_list is not empty
Which, however, as I explained, is always true since argv is /never/
completely empty, and thus the test is useless. What you probably
*wanted* is:
if len(sys.argv) > 1:
Which is effectively the opposite of my very first code snippet and
checks whether we /were/ passed some arguments on the command line.
By happy accident I suspect, due to the aforementioned way == works
between bools and ints and probably a logic error in your code.
Py3 must have broken that by sending a list
with the path to the script in BOTH the browser and Terminal. Is there
some newfangled way to determine what is running the script (hopefully
without a try wrapper)?
How exactly are you running the script *"in"* the browser? Browsers
can only execute JavaScript, not Python. Do you mean you're running it
via a webserver?
If so, there are /several/ possible ways of doing that, please explain
exactly which you are using.
Cheers,
Chris