2012-04-10 24 views
5

exe ​​sẽ chạy khi tôi mở trang. Quá trình không đồng bộ cần phải chạy.Làm thế nào để chạy một exe Không đồng bộ với hai đối số trong ruby?

Có cách nào để chạy exe Không đồng bộ với hai đối số bằng ruby ​​không?

tôi đã thử các lệnh ruby ​​- system(), exec() nhưng quá trình đợi của nó hoàn tất. tôi cần phải bắt đầu exe với tham số không cần phải chờ quá trình hoàn thành

là bất kỳ rubygems nào sẽ hỗ trợ cho vấn đề của tôi không?

Trả lời

7

Bạn có thể sử dụng Process.spawnProcess.wait2:

pid = Process.spawn 'your.exe', '--option' 

# Later... 
pid, status = Process.wait2 pid 

chương trình của bạn sẽ được thực hiện như một quá trình con của người phiên dịch. Bên cạnh đó, nó sẽ hoạt động như thể nó đã được gọi từ dòng lệnh.

Bạn cũng có thể sử dụng Open3.popen3:

require 'open3' 
*streams, thread = Open3.popen3 'your.exe', '--option' 

# Later... 
streams.each &:close 
status = thread.value 

Sự khác biệt chính ở đây là bạn có thể truy cập đến ba IO đối tượng. Các luồng đầu vào, đầu ra và lỗi chuẩn của quy trình được chuyển hướng đến chúng theo thứ tự đó.

Điều này thật tuyệt nếu bạn định tiêu thụ đầu ra của chương trình hoặc liên lạc với nó thông qua luồng đầu vào tiêu chuẩn của nó. Văn bản thường được in trên thiết bị đầu cuối sẽ được cung cấp cho tập lệnh của bạn.

Bạn cũng nhận được một chuỗi sẽ đợi chương trình kết thúc thực thi, thuận tiện và trực quan.

1

exec thiết bị chuyển mạch kiểm soát quy trình mới và không bao giờ quay trở lại. system tạo một tiến trình con và chờ nó kết thúc.

Điều bạn có thể muốn làm là fork và sau đó exec để tạo quy trình mới mà không phải chờ quá trình trả lại. Bạn cũng có thể sử dụng thư viện win32ole có thể là give you more control.

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