-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathimg2orgtable.py
More file actions
69 lines (52 loc) · 1.62 KB
/
Copy pathimg2orgtable.py
File metadata and controls
69 lines (52 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env python3
import io
from io import UnsupportedOperation
import sys
import os
import img2orgtable_core
from img2orgtable_core import Error
from pathlib import Path
# silent stdout/err
def _silence_fds():
try:
stdout_fd = sys.stdout.fileno()
stderr_fd = sys.stderr.fileno()
except (io.UnsupportedOperation, AttributeError):
return None
devnull_fd = os.open(os.devnull, os.O_WRONLY)
saved_stdout = os.dup(stdout_fd)
saved_stderr = os.dup(stderr_fd)
os.dup2(devnull_fd, stdout_fd)
os.dup2(devnull_fd, stderr_fd)
return (saved_stdout, saved_stderr, devnull_fd, stdout_fd, stderr_fd)
def _restore_fds(token):
if token is None:
return
saved_stdout, saved_stderr, devnull_fd, stdout_fd, stderr_fd = token
os.dup2(saved_stdout, stdout_fd)
os.dup2(saved_stderr, stderr_fd)
os.close(saved_stdout)
os.close(saved_stderr)
os.close(devnull_fd)
def main(argv=None):
tok = _silence_fds()
try:
argv = argv or sys.argv[1:]
err: Error = Error()
if len(argv) < 1 or not Path(argv[0]).exists():
err.code = 64
err.mes = "usage: img2org.py IMAGE"
print(err.mes, file=sys.stderr)
sys.exit(err.code)
table = img2orgtable_core.extract_table(argv[0], err)
finally:
_restore_fds(tok)
if err.code != 0:
print(err.mes, file=sys.stderr)
sys.exit(err.code)
if table is None:
print("# no table detected", file=sys.stderr)
sys.exit(2)
print(img2orgtable_core.to_org(table))
if __name__ == "__main__":
main()