2012-06-27 15 views
6

C'è un modo per eseguire il ciclo in while se si avvia lo script con python -c? Questo non sembra essere correlato alla piattaforma o la versione in pitone ...python -c e `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] ~]$ 

di 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> 

Ho provato a rimuovere la parentesi nella dichiarazione while, ma nulla sembra fare questa corsa.

risposta

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

avrebbe funzionato (notare il $'...' e il \n).

Ma potrebbe essere che funziona solo sotto - Non sono sicuro ...

+2

upvoted per l'utilizzo di subprocess invece di os. system –

+1

'os.system()' non è ovviamente canonico, ma ho trovato che le domande più brevi sono meglio su [so]. 'os' è più corto di' subprocess' –

+0

Se dovesse essere solo un esempio, 'print 1234' (o' print (1234) ') sarebbe stato sufficiente. Ma non è questo il punto principale di tutto questo ... – glglgl

4

Le istruzioni multilinea potrebbero non avviarsi dopo una dichiarazione che separa ; in Python, altrimenti potrebbero esserci delle ambiguità sui blocchi di codice. È sufficiente utilizzare le interruzioni di riga anziché ;. Questo "lavora" su Linux:

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

Non sai come entrare in questo su Windows, ma perché non è sufficiente scrivere i comandi in un file .py se è più di una riga?

+0

@MikePennington: Se si tratta di un utilizzo una tantum, perché non si avvia l'interprete e si immettono i comandi lì? –

+0

reindirizzamento della shell e pipe, un po 'più semplice modifica della freccia su bash se faccio un errore ... e sono ancora agganciato alla sintassi 'perl -e' da anni di uso perl –

2

non si conosce circa le finestre, se invece si è di essere in grado di digitare one-liners, si potrebbe prendere in considerazione le interruzioni di riga all'interno cita:

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

Se proprio deve fare questa operazione in Windows, è possibile utilizzare exec:

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

(ho sostituito dir quindi funziona sul mio sistema Windows)