2012-06-27 32 views
6

Có cách nào để lặp lại trong while nếu bạn bắt đầu tập lệnh với python -c không? Đây dường như không có liên quan đến nền tảng hoặc phiên bản python ...python -c và `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] ~]$ 

của 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> 

Tôi đã cố gắng loại bỏ ngoặc trong báo cáo while, nhưng dường như không có gì để thực hiện điều này.

Trả lời

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

sẽ làm việc (chú ý $'...'\n).

Nhưng nó có thể là nó chỉ hoạt động dưới - Tôi không chắc chắn ...

+2

upvoted cho sử dụng subprocess thay vì os. hệ thống –

+1

'os.system()' rõ ràng là không kinh điển, nhưng tôi thấy rằng các câu hỏi ngắn hơn là tốt hơn trên [như vậy]. 'os' ngắn hơn' subprocess' –

+0

Nếu nó được cho là một ví dụ, 'print 1234' (hoặc' print (1234) ') cũng đã đủ. Nhưng đó không phải là ý chính của tất cả ... – glglgl

4

Sao kê nhiều dòng không thể bắt đầu sau khi tách biệt tuyên bố ; bằng Python - nếu không, có thể có sự mơ hồ về các khối mã. Chỉ cần sử dụng ngắt dòng thay cho ;. Này "tác phẩm" trên Linux:

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

Không chắc làm thế nào để nhập này trên Windows, nhưng tại sao không chỉ đơn giản là viết các lệnh vào một file .py nếu nó nhiều hơn một dòng?

+0

@MikePennington: Nếu đó là lần sử dụng một lần, tại sao bạn không khởi chạy trình thông dịch và nhập lệnh vào đó? –

+0

shell chuyển hướng và đường ống, hơi dễ dàng hơn 'bash' lên-mũi tên chỉnh sửa nếu tôi làm cho một sai lầm ... và tôi vẫn còn nối vào «perl -e' cú pháp từ năm sử dụng perl –

2

Không biết về cửa sổ, nếu tất cả các bạn muốn là để có thể gõ vào một lớp lót, bạn có thể xem xét ngắt dòng bên trong dấu ngoặc kép:

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

Nếu bạn thực sự phải làm điều này trong cửa sổ, bạn có thể sử dụng exec:

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

(tôi thay dir để nó hoạt động trên hệ thống cửa sổ của tôi)

Các vấn đề liên quan