How to use "while" within the command in -c option of python?

Steven D'Aprano steve+comp.lang.python at pearwood.info
Fri Oct 12 20:32:41 EDT 2012


On Fri, 12 Oct 2012 19:04:20 -0400, Etienne Robillard wrote:

> On Fri, 12 Oct 2012 15:51:19 -0700
> Herman <sorsorday at gmail.com> wrote:
> 
>>  python -c "import os; while True: print('hello')" File "<string>",
>>  line 1
>>  import os; while True: print('hello')
>>                       ^
>> SyntaxError: invalid syntax
>> --
>> http://mail.python.org/mailman/listinfo/python-list
> 
> You get a syntax error since you didn't used tabs indents in your string
> which is normal for python AFAIK.

Incorrect. Python lets you use either spaces or tabs for indents, and in 
this case the SyntaxError is BEFORE the missing indent. He gets 
SyntaxError because you can't follow a semicolon with a statement that 
begins a block. It's the `while` that causes the error, not the lack of 
indent. Here's an example with `if` and an indented block that also 
fails:


[steve at ando ~]$ python -c "pass; pass"
[steve at ando ~]$ python -c "pass; if True:        pass"
  File "<string>", line 1
    pass; if True:       pass
           ^
SyntaxError: invalid syntax


Solution: don't use semi-colons, use newlines.

In this example, I use `Ctrl-Q ENTER` to insert a literal newline in the 
string, which shows as ^M. Note that you *cannot* just type ^ M (caret 
M), that won't work, it must be an actual control character.


[steve at ando ~]$ python -c 'import time^Mwhile True:^M    print("hello"); time.sleep(2)'
hello
hello
hello
Traceback (most recent call last):
  File "<string>", line 3, in <module>
KeyboardInterrupt


In this example I just hit the Enter key to insert a newline, and let the 
shell deal with it. The ">" marks are part of the shell's prompt.

[steve at ando ~]$ python -c "import time
> while True:
>     print('hello'); time.sleep(2)"
hello
hello
hello
Traceback (most recent call last):
  File "<string>", line 3, in <module>
KeyboardInterrupt




-- 
Steven



More information about the Python-list mailing list