2009-04-28 50 views
26

Perl hỗ trợ ba cách (mà tôi biết) của chương trình bên ngoài chạy:Sự khác biệt giữa hệ thống và đường sau và đường ống trong Perl là gì?

system:

system PROGRAM LIST 

như trong:

system "abc"; 

backticks như trong:

`abc`; 

chạy qua một đường ống như sau:

open ABC, "abc|"; 

Sự khác biệt giữa chúng là gì? Dưới đây là những gì tôi biết:

  1. Bạn có thể sử dụng backticks và đường ống để có được đầu ra của lệnh dễ dàng.
  2. đó là nó (nhiều hơn trong chỉnh sửa trong tương lai?)

Trả lời

35
  • hệ thống(): chạy lệnh và trả về tình trạng thoát lệnh của
  • backticks: chạy lệnh và trả đầu ra của lệnh
  • đường ống: chạy lệnh và cho phép bạn sử dụng chúng dưới dạng tay cầm

Ngoài ra backticks chuyển hướng STDOUT của chương trình đã thực hiện thành một biến và hệ thống gửi nó tới STDOUT của chương trình chính của bạn.

+0

đường ống là một kiểm soát tốt hơn hạt backticks. backticks trả về STDOUT, như sau: $ date = 'date'. Với đường ống, bạn có thể quyết định thời điểm và cách đọc đầu ra, hoặc gửi tín hiệu đến quy trình. –

2

hệ thống cũng trả về giá trị thoát của ứng dụng (ERRORLEVEL trong Windows). Đường ống phức tạp hơn một chút để sử dụng, khi đọc từ chúng và đóng chúng thêm mã bổ sung. Cuối cùng, họ đã thực hiện khác nhau mà có nghĩa là để làm những việc khác nhau. Sử dụng các đường ống bạn có thể giao tiếp lại với các ứng dụng đã thực hiện, trong khi các lệnh khác không cho phép điều đó (dễ dàng).

1

Trạng thái thoát của chương trình không bị giới hạn ở system(). Khi bạn gọi close(PIPE), nó sẽ trả về trạng thái thoát và bạn có thể nhận trạng thái thoát mới nhất cho cả 3 phương thức từ $?.

hãy cũng lưu ý rằng

readpipe('...') 

cũng giống như

`...` 
+0

bạn có thể hoàn thành câu này không? Cũng xin lưu ý rằng readpipe ('...') thay vì .... –

+0

Tôi đã sửa định dạng để làm cho nó rõ ràng hơn. Việc sử dụng backticks để biểu thị loại cố định làm cho nó khó gõ * backticks thực * ... – ephemient

+0

Như một lưu ý khác, '...' và qx /.../ (và qx (...) và qx # ... # và bất kỳ dấu phân tách nào khác) cũng tương đương. – ephemient

3

Các tài liệu perlipc giải thích các cách khác nhau mà bạn có thể tương tác với các quá trình khác từ Perl, và perlfunc's open documentation giải thích filehandles máy.

  • Hệ thống sẽ gửi sản lượng của nó để đầu ra tiêu chuẩn (và lỗi)
  • Các backticks bắt đầu ra tiêu chuẩn và trả về nó (nhưng không phải sai số chuẩn)
  • Các mở đường ống cho phép bạn chụp đầu ra và đọc nó từ một tập tin xử lý, hoặc để in đến một tập tin xử lý và sử dụng nó như là đầu vào cho lệnh bên ngoài.

Ngoài ra còn có các mô-đun xử lý các chi tiết này với các trường hợp cạnh nền tảng.

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