right_popen 1.0.3 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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'
|