2012-06-27 23 views
6

Czy istnieje sposób na zapętlenie w while, jeśli uruchomisz skrypt za pomocą python -c? To nie wydaje się być związane z platformą lub wersji Pythona ...python -c i `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] ~]$ 

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

Próbowałem usuwanie nawiasów w rachunku while, ale wydaje się, że nic się nie dzieje.

Odpowiedz

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

będzie działać (uwaga $'...' i \n).

Ale to może być to, że działa tylko pod - Nie jestem pewien ...

+2

upvoted za korzystanie podproces zamiast os. system –

+1

'os.system()' nie jest oczywiście kanoniczny, ale odkryłem, że krótsze pytania są lepsze w [tak]. 'os' jest krótszy niż' podproces'' –

+0

Gdyby miał to być tylko przykład, wystarczyłoby 'print 1234' (lub' print (1234) '). Ale to nie jest główna część tego wszystkiego ... – glglgl

4

Wyciągi wielowierszowe nie mogą rozpoczynać się po rozłączeniu instrukcji ; w języku Python - w przeciwnym razie mogą występować niejednoznaczności dotyczące bloków kodu. Po prostu używaj linii podziału zamiast ;. To „działa” w systemie Linux:

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

Nie wiesz, jak wprowadzić to w systemie Windows, ale dlaczego nie po prostu napisać polecenia do pliku .py jeśli jest więcej niż jeden wiersz?

+0

@MikePennington: Jeśli to jest jednorazowego użytku, dlaczego nie można uruchomić tłumacza i wprowadzić tam polecenia? –

+0

Przekierowywanie powłoki i rury, nieco łatwiej 'bash' strzałka w górę do edycji, jeśli się pomylę ... i nadal jestem uzależniony od' perl -e' składnia od lat użytkowania perl –

2

nie wiem o oknach, jeśli chcesz to, aby móc wpisać w jednej wkładki, można rozważyć podziały wiersza wewnątrz cytuje:

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

Jeśli naprawdę musi to zrobić w systemie Windows, można użyć exec:

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

(I podstawionego dir tak to działa w moim systemie Windows)