right_popen 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/linux/right_popen.rb +8 -11
- data/right_popen.gemspec +1 -1
- metadata +1 -1
data/lib/linux/right_popen.rb
CHANGED
@@ -35,15 +35,10 @@ module RightScale
|
|
35
35
|
|
36
36
|
# === Parameters
|
37
37
|
# target(Object):: Object defining handler methods to be called.
|
38
|
-
#
|
39
38
|
# stdout_handler(String):: Token for stdout handler method name.
|
40
|
-
#
|
41
39
|
# exit_handler(String):: Token for exit handler method name.
|
42
|
-
#
|
43
40
|
# stderr_eventable(Connector):: EM object representing stderr handler.
|
44
|
-
#
|
45
41
|
# read_fd(IO):: Standard output read file descriptor.
|
46
|
-
#
|
47
42
|
# write_fd(IO):: Standard output write file descriptor.
|
48
43
|
def initialize(target, stdout_handler, exit_handler, stderr_eventable, read_fd, write_fd)
|
49
44
|
@target = target
|
@@ -75,10 +70,12 @@ module RightScale
|
|
75
70
|
# target(Object):: Object defining handler methods to be called.
|
76
71
|
#
|
77
72
|
# stderr_handler(String):: Token for stderr handler method name.
|
78
|
-
|
73
|
+
# read_fd(IO):: Error output read file descriptor.
|
74
|
+
def initialize(target, stderr_handler, read_fd)
|
79
75
|
@target = target
|
80
76
|
@stderr_handler = stderr_handler
|
81
77
|
@unbound = false
|
78
|
+
@read_fd = read_fd # So it doesn't get GCed
|
82
79
|
end
|
83
80
|
|
84
81
|
# Callback from EM to receive data.
|
@@ -112,14 +109,13 @@ module RightScale
|
|
112
109
|
#
|
113
110
|
# === Parameters
|
114
111
|
# cmd(String):: command to execute, including any arguments.
|
115
|
-
#
|
116
112
|
# target(Object):: object defining handler methods to be called.
|
117
|
-
#
|
118
113
|
# stdout_handler(String):: token for stdout handler method name.
|
119
|
-
#
|
120
114
|
# stderr_handler(String):: token for stderr handler method name.
|
121
|
-
#
|
122
115
|
# exit_handler(String):: token for exit handler method name.
|
116
|
+
#
|
117
|
+
# === Returns
|
118
|
+
# true:: Always returns true
|
123
119
|
def self.popen3(cmd, target, stdout_handler = nil, stderr_handler = nil, exit_handler = nil)
|
124
120
|
raise "EventMachine reactor must be started" unless EM.reactor_running?
|
125
121
|
GC.start # To garbage collect open file descriptors from passed executions
|
@@ -128,12 +124,13 @@ module RightScale
|
|
128
124
|
r, w = Socket::pair(Socket::AF_LOCAL, Socket::SOCK_STREAM, 0)#IO::pipe
|
129
125
|
|
130
126
|
$stderr.reopen w
|
131
|
-
c = EM.attach(r, StdErrHandler, target, stderr_handler) if stderr_handler
|
127
|
+
c = EM.attach(r, StdErrHandler, target, stderr_handler, r) if stderr_handler
|
132
128
|
EM.popen(cmd, StdOutHandler, target, stdout_handler, exit_handler, c, r, w)
|
133
129
|
# Do not close 'w', strange things happen otherwise
|
134
130
|
# (command protocol socket gets closed during decommission)
|
135
131
|
$stderr.reopen saved_stderr
|
136
132
|
end
|
133
|
+
true
|
137
134
|
end
|
138
135
|
|
139
136
|
end
|
data/right_popen.gemspec
CHANGED
@@ -4,7 +4,7 @@ spec = Gem::Specification.new do |spec|
|
|
4
4
|
is_windows = RUBY_PLATFORM =~ /mswin/
|
5
5
|
|
6
6
|
spec.name = 'right_popen'
|
7
|
-
spec.version = '1.0.
|
7
|
+
spec.version = '1.0.4'
|
8
8
|
spec.authors = ['Scott Messier', 'Raphael Simon']
|
9
9
|
spec.email = 'scott@rightscale.com'
|
10
10
|
spec.homepage = 'https://github.com/rightscale/right_popen'
|