2012-06-27 48 views
6

如果您以python -c啓動腳本,有沒有辦法在while中循環?這似乎並不可能與平臺或Python版本...python -c and` 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] ~]$ 

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

我試圖在while聲明刪除括號,但似乎沒有讓這個運行。

回答

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

將工作(注意$'...'\n)。

但是這可能是因爲它只能下 - 我不知道......

+2

upvoted使用子進程而不是os。系統 –

+1

'os.system()'顯然不是規範的,但我發現在[so]上更短的問題更好。 'os'比'subprocess'短 –

+0

如果它只是一個例子,'print 1234'(或'print(1234)')就足夠了。但這不是這一切的主要... – glglgl

4

多行語句可能不會在Python中的語句分開;後開始 - 否則,可能會存在對代碼塊的歧義。只需使用換行符而不是;。這對Linux的「作品」:

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

不知道如何在Windows中輸入這一點,但爲什麼不乾脆寫命令到.py文件,如果是多行?

+0

@MikePennington:如果它是一次性使用,爲什麼不啓動解釋器並在那裏輸入命令? –

+0

shell重定向和管道,如果我犯了一個錯誤''bash'向上箭頭編輯稍微容易一些...我仍然迷戀perl使用多年的'perl -e'語法 –

2

不知道有窗戶,如果你想要的是能夠在輸入的俏皮話,你可以考慮換行內引用:

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

如果你真的必須這樣做,在Windows中,你可以使用EXEC:

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

(我取代dir所以它適用於我的Windows系統)