commandwrapper là một mô-đun Python để bọc một lệnh shell vào một đối tượng Python luồng.
Cách sử dụng:
Bạn muốn khởi động các lệnh bash sau đây trong một chủ đề:
[User @ localhost ~] $ ls -l | grep pdf | wc -l
5
đây là cách bạn có thể làm điều đó:
>>> Ls = WrapCommand ('ls -l')
>>> GrepPdf = WrapCommand ('grep pdf')
>>> Wc = WrapCommand ('wc -l')
>>> Wc.stdin = GrepPdf
>>> GrepPdf.stdin = Ls
>>> Wc.start ()
>>> #Do Thứ
...
>>> Wc.join ()
>>> Wc.results
(5 ' n', '')
tài sản "kết quả" là một bộ (stdoutdata, stderrdata)
Bạn cũng có thể làm theo cách này:
>>> Ls = WrapCommand ('ls -l | grep pdf | wc -l', shell = True)
>>> Ls.start ()
>>> #Do Thứ
>>> Ls.join ()
>>> Ls.results [0]
'5 n'
Bạn sẽ cần phải xác định "shell = True 'khi lệnh bạn muốn thực hiện là thực sự được xây dựng vào vỏ. tức là: trên Windows nếu bạn sử dụng được xây dựng trong các lệnh như 'dir' hay 'bản sao': http://docs.python.org/library/subprocess.html#subprocess.Popen
Mục đích của việc thực hiện nó trong một chủ đề là khi các lệnh trên có thể mất một vài giờ, và rằng bạn muốn thực hiện các nhiệm vụ khác trong khi đó. Bạn có thể kiểm tra quá trình vẫn chạy với:
>>> Wc.is_alive ()
Sai
'True' sẽ được trả lại nếu vẫn còn chạy. Để chấm dứt quá sớm (tức là nó bế tắc) bạn có "chấm dứt () ',' kill () 'hoặc' send_signal (tín hiệu) phương pháp đó là tự nói. Khi bạn muốn chờ đợi cho thread để kết thúc, sử dụng phương pháp 'tham gia ()': http://docs.python.org/library/threading.html#threading.Thread.join
Bạn muốn khởi động các lệnh bash sau đây mà không luồng:
[User @ localhost ~] $ ls -l | grep pdf | wc -l
5
đây là cách bạn có thể làm điều đó:
>>> Ls = WrapCommand ('ls -l')
>>> GrepPdf = WrapCommand ('grep pdf')
>>> Wc = WrapCommand ('wc -l')
>>> Wc (GrepPdf (Ls))
'5 n'
Tránh làm điều này trong quá trình mà một số lượng lớn các dữ liệu được dẫn giữa mỗi lệnh.
thay vào đó, làm theo cách này:
>>> Ls = WrapCommand ('ls -l | grep pdf | wc -l', shell = True)
>>> Ls ()
'5 n'
Thích phương pháp luồng thay vì nếu điều này có thể mất một thời gian dài và bạn muốn thực hiện các nhiệm vụ khác trong khi đó.
Bạn có thể chỉ định một shell để chạy lệnh:
>>> Ls = WrapCommand ('ls', vỏ = True, thực thi = 'C: /windows/System32/WindowsPowerShell/v1.0/powershell.exe')
>>> Ls print ()
& Nbsp; mục: C: Users Yves python_tests
Chế độ LastWriteTime Length Name
---- ------------- ------ ----
-a --- 27/01/2011 00:14 7006 commandwrapper.py
-a --- 27/01/2011 00:15 7048 commandwrapper.pyc
Bạn cũng có thể sử dụng Quản lý Context (with_item): http://docs.python.org/reference/compound_stmts.html#grammar-token-with_item
Ví dụ:
>>> Với WrapCommand ('ls -l') như Ls:
... Với WrapCommand ('grep pdf') như GrepPdf:
... Với WrapCommand ('wc -l') như Wc:
... Wc.stdin = GrepPdf
... GrepPdf.stdin = Ls
... Wc.start ()
... #Do Thứ
... Wc.join ()
...
>>> Wc.results
(5 ' n', '')
Bạn cũng có thể chỉ đơn giản là muốn có một objet trình con:
>>> Ls = WrapCommand ('ls -l')
>>> Lscmd = ls.makeCmd ()
>>>
các đối tượng trả lại (lscmd trong ví dụ trên) là một đối tượng subprocess.Popen chuẩn
WrapOnceCommand là giống như WrapCommand, nhưng các thuộc tính cmd đó là một đối tượng subprocess.Popen sẽ được tạo ra một lần và cho tất cả Vì vậy chạy tole (hoặc đối tượng) chỉ có thể được gọi là một lần. Mục tiêu nó để khởi động một lệnh trong một chủ đề, và có lệnh này dễ dàng bắt đầu / dừng lại từ nơi khác
là gì mới trong phiên bản này:.
- Thay đổi thông tin liên hệ của tác giả.
là gì mới trong phiên bản 0.4:
- Các Cảnh báo ở đây: http: //docs.python. org / tham khảo / datamodel.html # đối tượng .__ del __
- Và becasue đối tượng bị phá hủy nơi không automaticaly loại bỏ bởi các bộ thu rác như mô tả ở đây. http://docs.python.org/library/gc.html#gc.garbage Mà có thể gây ra sự gia tăng sử dụng bộ nhớ
Yêu cầu :
- Python
Bình luận không