system_run 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +52 -2
  3. data/system_run.gemspec +1 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cd6598275fe6de6a8b62779ad1ad194634552787
4
- data.tar.gz: 6323869c240f230dc367ca83183c74fc6e10e283
3
+ metadata.gz: 82b98b36722d6fefa40acc60c9e71a3e88c4917a
4
+ data.tar.gz: 42d53eaffdc0d376a6541d8e6398c8fde8e0e6ed
5
5
  SHA512:
6
- metadata.gz: 7476d1f83a81b930acf77623d1b0c523fa5f1b009dfc1d8262779ae06acc2a19d570f6fcdbb1e1e6f11d70e083766058714c3c3ce12bfb23e6ef14af28faea1f
7
- data.tar.gz: 72740f36a260b1cea5a683d85fab6468c3d8da0e2d104e276f7e3b1a276af344898fdc747af98f3567acbe0b799af5ef89b5275717fbcede002d4af3aacaa4a6
6
+ metadata.gz: 805bb4f14de0dd05d69833a367452c891f5439cea6078602bc3d136f65c99ecd38dbf1e10301005b36e1849003e513e368cba3a7eb92a87906202a7a46b32532
7
+ data.tar.gz: f79a1e1ed744aea047fdc737a0d086bfaaea857286ddaca287b0b3e28cd4b562cf4eded8fba549ee9c4cbc90257396553879cc7aca2f5fc9c364cdd78a2d54b7
data/README.md CHANGED
@@ -8,12 +8,19 @@ a timeout occurs and other options that are forwarded to `spawn` as-is.
8
8
 
9
9
  ## Examples
10
10
 
11
+ System.run will by default capture stderr and stdout separately and return
12
+ them as strings along with the process exit state.
13
+
11
14
  ```ruby
12
15
  # capture both stderr and stdout, but separately.
13
16
  program = %q{ruby -e "STDOUT.print 'hello'; STDERR.print 'world'"}
14
17
  System.run program
15
18
  # => [#<Process::Status: pid 20407 exit 0>, "hello", "world"]
19
+ ```
16
20
 
21
+ You can also only pick just one by specifiying the `capture` keyword argument.
22
+
23
+ ```ruby
17
24
  # only capture stdout.
18
25
  System.run program, capture: :out
19
26
  # => [#<Process::Status: pid 20421 exit 0>, "hello"]
@@ -21,18 +28,36 @@ System.run program, capture: :out
21
28
  # only capture stderr.
22
29
  System.run program, capture: :err
23
30
  # => [#<Process::Status: pid 20458 exit 0>, "world"]
31
+ ```
32
+
33
+ Sometimes, it is also useful to capture both stdout _and_ stderr simultaneously.
34
+ Bear in mind, however, that stdout is buffered and thus might not appear if the
35
+ process dies before the buffer is flushed.
24
36
 
37
+ ```ruby
25
38
  # capture both stdout and stderr into the same string.
26
39
  # stdout is buffered, stderr is not!
27
40
  System.run program, capture: :both
28
41
  # => [#<Process::Status: pid 20464 exit 0>, "worldhello"]
42
+ ```
43
+
44
+ You can also specify a timeout interval after which System.run will kill
45
+ the process.
29
46
 
47
+ ```ruby
30
48
  # kill (send signal 9) process after the specified time.
31
49
  program = %q{ruby -e "STDERR.print 'this can only end badly'; loop { sleep 1 }"}
32
50
  System.run program, timeout: 2, capture: :both
33
51
  # ...
34
52
  # => [#<Process::Status: pid 20507 SIGKILL (signal 9)>, "this can only end badly"]
53
+ ```
35
54
 
55
+ If outright killing the process is too harsh for you, or you want to do some
56
+ extra things like logging the timeout, you can specify a callable object that
57
+ will get called when the timeout expires. This callable will receive one argument,
58
+ the process id of the spawned child.
59
+
60
+ ```ruby
36
61
  # override default action with sending SIGTERM and setting a control variable.
37
62
  state = :everything_is_great
38
63
  System.run program, timeout: 2, capture: :both, on_timeout: ->(pid) do
@@ -41,16 +66,33 @@ System.run program, timeout: 2, capture: :both, on_timeout: ->(pid) do
41
66
  end
42
67
  # ...
43
68
  # => [#<Process::Status: pid 20519 SIGTERM (signal 15)>, "this can only end badly"]
69
+ ```
44
70
 
71
+ You can temporarily set some environment variables that will be accessible to
72
+ the child process. Keys and values will be converted to string by System.run
73
+ for you, don't worry about that.
74
+
75
+ ```ruby
45
76
  # set some environment variable.
46
77
  program = %{ruby -e "STDERR.print ENV['hello']; STDOUT.print Dir.pwd"}
47
78
  System.run program, capture: :err, env: {'hello' => 2}
48
79
  # => [#<Process::Status: pid 20540 exit 0>, "2"]
80
+ ```
81
+
82
+ You can also specify the directory which shall be the working directory
83
+ for the child process.
49
84
 
85
+ ```ruby
50
86
  # set working dir.
51
87
  System.run program, capture: :out, cwd: Dir.tmpdir
52
88
  # => [#<Process::Status: pid 20545 exit 0>, "/tmp"]
89
+ ```
90
+
91
+ If the output is too large to be loaded into memory or you want to keep the
92
+ output, you can specify a file–or for default capture, two files–that
93
+ System.run should write to. System.run will rewind the file after writing.
53
94
 
95
+ ```ruby
54
96
  # redirect to file (File or Tempfile or descendants)
55
97
  program = %q{ruby -e "STDOUT.print 'hello'; STDERR.print 'world'"}
56
98
  out = Tempfile.new 'out'
@@ -61,16 +103,24 @@ out.read
61
103
  # => "hello"
62
104
  err.read
63
105
  # => "world"
106
+ ```
64
107
 
108
+ You can specify all options the same as when working with strings, System.run doesn't care.
109
+
110
+ ```ruby
65
111
  # everything works the same!
66
112
  out = Tempfile.new 'out'
67
113
  System.run program, file: out, capture: :both
68
114
  # => #<Process::Status: pid 20591 exit 0>
69
115
  out.read
70
116
  # => "worldhello"
117
+ ```
118
+
119
+ You can also supply text to be used as input for the child process by passing
120
+ the corresponding file object as `in` keyword parameter.
71
121
 
72
- # you can specify some file to be used as stdin. this option is passed
73
- # directly to Kernel.spawn.
122
+ ```ruby
123
+ # the in: option is passed directly to Kernel.spawn.
74
124
  input = Tempfile.new.tap { |f| f.write('system_run'); f.rewind }
75
125
  echo = %q{ruby -e "print STDIN.gets"}
76
126
  System.run echo, in: input, capture: :out
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "system_run"
3
- s.version = "1.0.2"
3
+ s.version = "1.0.3"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.license = "MIT"
6
6
  s.summary = "Tiny wrapper for running commands. Inspired by systemu."
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: system_run
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sonja Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-09 00:00:00.000000000 Z
11
+ date: 2017-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec