Skip to content

Commit eb392cb

Browse files
committed
add a py.Println(self py.Object, args... string) function and implement it in OS module
1 parent 834e0b5 commit eb392cb

File tree

3 files changed

+39
-3
lines changed

3 files changed

+39
-3
lines changed

main

4.06 KB
Binary file not shown.

os/os.module.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package os
55
// license that can be found in the LICENSE file.
66

77
import (
8-
"fmt"
98
"os"
109
"os/exec"
1110
"reflect"
@@ -203,7 +202,11 @@ func system(self py.Object, args py.Tuple) (py.Object, error) {
203202
if err != nil {
204203
return nil, py.ExceptionNewf(py.OSError, err.Error())
205204
}
206-
fmt.Println(string(outb)) // FIXME - use gpython Stdout
205+
code, err := py.Println(self, string(outb))
206+
if code != 0 || err != nil {
207+
return py.Int(1), nil
208+
}
209+
207210
return py.Int(0), nil
208211
}
209212

py/util.go

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package py
77
import (
88
"errors"
99
"strconv"
10+
"strings"
1011
)
1112

1213
var (
@@ -88,7 +89,7 @@ func LoadIntsFromList(list Object) ([]int64, error) {
8889
if N <= 0 {
8990
return nil, nil
9091
}
91-
92+
9293
intList := make([]int64, N)
9394
for i := Int(0); i < N; i++ {
9495
item, err := getter.M__getitem__(i)
@@ -204,3 +205,35 @@ func loadValue(src Object, data interface{}) error {
204205
}
205206
return nil
206207
}
208+
209+
// print to gpythons stdout neatly
210+
func Println(self Object, args ...string) (int, error) {
211+
sysModule, err := self.(*Module).Context.GetModule("sys")
212+
if err != nil {
213+
return 1, err
214+
}
215+
stdout := sysModule.Globals["stdout"]
216+
write, err := GetAttrString(stdout, "write")
217+
if err != nil {
218+
return 1, err
219+
}
220+
for _, v := range args {
221+
if strings.Contains(v, "\n") {
222+
_, err = Call(write, Tuple{String(v)}, nil) // do not write a space
223+
if err != nil {
224+
return 1, err
225+
}
226+
} else {
227+
_, err = Call(write, Tuple{String(v + " ")}, nil)
228+
if err != nil {
229+
return 1, err
230+
}
231+
}
232+
233+
}
234+
_, err = Call(write, Tuple{String("\n")}, nil) // newline
235+
if err != nil {
236+
return 1, err
237+
}
238+
return 0, nil
239+
}

0 commit comments

Comments
 (0)