2012-06-27 15 views
6

¿Hay una forma de bucle en while si inicia la secuencia de comandos con python -c? Esto no parece estar relacionada con la plataforma o versión de pitón ...python -c y `while`

Linux

[[email protected] ~]$ python -c "import os;while (True): os.system('ls')" 
    File "<string>", line 1 
    import os;while (True): os.system('ls') 
       ^
SyntaxError: invalid syntax 
[[email protected] ~]$ 
[[email protected] ~]$ python -V 
Python 2.6.6 
[[email protected] ~]$ uname -a 
Linux Hotcoffee 2.6.32-5-amd64 #1 SMP Sun May 6 04:00:17 UTC 2012 x86_64 GNU/Linux 
[[email protected] ~]$ 

de Windows

C:\Users\mike_pennington>python -c "import os;while True: os.system('dir')" 
    File "<string>", line 1 
    import os;while True: os.system('dir') 
       ^
SyntaxError: invalid syntax 

C:\Users\mike_pennington>python -V 
Python 2.7.2 

C:\Users\mike_pennington> 

He intentado quitar paréntesis en la declaración while, pero nada parece hacer que esto funcione.

Respuesta

8
python -c $'import subprocess\nwhile True: subprocess.call(["ls"])' 

funcionaría (nótese el $'...' y el \n).

Pero podría ser que sólo funciona bajo - No estoy seguro ...

+2

upvoted para usar subproceso en vez de os. sistema –

+1

'os.system()' obviamente no es canónico, pero he encontrado que las preguntas más cortas son mejores en [así que]. 'os' es más corto que' subprocess' –

+0

Si se suponía que fuera un ejemplo, 'print 1234' (o' print (1234) ') también habría sido suficiente. Pero ese no es el principal pont de todo esto ... – glglgl

4

Es posible que las sentencias de línea múltiple no comiencen después de una declaración que separa ; en Python; de lo contrario, podría haber ambigüedades sobre los bloques de código. Simplemente use saltos de línea en lugar de ;. Este "obras" en Linux:

$ python -c "import os 
while True: os.system('ls')" 
No

seguro de cómo introducir esta en Windows, pero ¿por qué no simplemente escribir los comandos en un archivo .py si se trata de más de una línea?

+0

@MikePennington: si es un uso de una sola vez, ¿por qué no ejecuta el intérprete e ingresa los comandos allí? –

+0

redirección de shell y pipes, algo más fácil edición 'bash' up-arrow si me equivoco ... y todavía estoy enganchado a la sintaxis' perl -e' de años de uso de perl –

2

No sabe acerca de las ventanas, si lo que quieres es ser capaz de escribir una sola línea, usted podría considerar los saltos de línea entre comillas:

% python -c "import os; 
while (True): 
    os.system('ls')" 
1

Si realmente tiene que hacer esto en Windows, puede utilizar exec:

python -c "exec \"import os;\rwhile True:\r os.system('dir')\"" 

(sustituí dir por lo que funciona en mi sistema de Windows)