2 from libc.stdio cimport *
3 from posix.unistd cimport *
4 from posix.fcntl cimport *
6 cdef int noisy_function() except -1:
8 ret = printf(b"0123456789\n", 0)
12 ret = fprintf(stdout, b"0123456789\n", 0)
16 ret = write(STDOUT_FILENO, b"0123456789\n", 11)
21 def test_silent_stdout():
23 >>> test_silent_stdout()
26 cdef int stdout_save, dev_null
27 stdout_save = dup(STDOUT_FILENO)
28 assert stdout_save != -1
29 dev_null = open(b"/dev/null", O_WRONLY, 0)
31 ret = dup2(dev_null, STDOUT_FILENO)
32 assert ret == STDOUT_FILENO
38 ret = dup2(stdout_save, STDOUT_FILENO)
39 assert ret == STDOUT_FILENO
40 ret = close(stdout_save)
47 def __cinit__(self, int fd=-1):
49 self.fd = STDOUT_FILENO
54 cdef int ret = 0, dev_null = -1
55 assert self.fd_save == -1
56 dev_null = open(b"/dev/null", O_WRONLY, 0)
59 self.fd_save = dup(self.fd)
60 assert self.fd_save != -1
62 ret = dup2(dev_null, self.fd)
65 ret = close(self.fd_save)
70 def __exit__(self, t, v, tb):
72 if self.fd_save != -1:
73 ret = dup2(self.fd_save, self.fd)
75 ret = close(self.fd_save)
80 def test_silent_stdout_ctxmanager():
82 >> test_silent_stdout_ctxmanager()
92 with silent_fd(STDOUT_FILENO):