mirror of
https://github.com/freedomofpress/dangerzone.git
synced 2025-04-29 10:12:38 +02:00
Pass the stdout from the container a line at a time back to the app
This commit is contained in:
parent
c9c01f6e79
commit
7f93c1e752
2 changed files with 27 additions and 14 deletions
|
@ -88,8 +88,16 @@ def cli_main(output_filename, ocr_lang, filename):
|
||||||
|
|
||||||
# Convert the document
|
# Convert the document
|
||||||
print_header("Converting document to safe PDF")
|
print_header("Converting document to safe PDF")
|
||||||
|
|
||||||
|
def stdout_callback(line):
|
||||||
|
print(line.rstrip())
|
||||||
|
|
||||||
success = convert(
|
success = convert(
|
||||||
global_common, common.input_filename, common.output_filename, ocr_lang
|
global_common,
|
||||||
|
common.input_filename,
|
||||||
|
common.output_filename,
|
||||||
|
ocr_lang,
|
||||||
|
stdout_callback,
|
||||||
)
|
)
|
||||||
|
|
||||||
if success:
|
if success:
|
||||||
|
|
|
@ -25,16 +25,21 @@ else:
|
||||||
startupinfo = None
|
startupinfo = None
|
||||||
|
|
||||||
|
|
||||||
def exec(args):
|
def exec(args, stdout_callback=None):
|
||||||
|
print(f"exec, stdout_callback={stdout_callback}")
|
||||||
with subprocess.Popen(
|
with subprocess.Popen(
|
||||||
args,
|
args,
|
||||||
stdin=None,
|
stdin=None,
|
||||||
stdout=sys.stdout,
|
stdout=subprocess.PIPE,
|
||||||
stderr=sys.stderr,
|
stderr=subprocess.STDOUT,
|
||||||
bufsize=1,
|
bufsize=1,
|
||||||
universal_newlines=True,
|
universal_newlines=True,
|
||||||
startupinfo=startupinfo,
|
startupinfo=startupinfo,
|
||||||
) as p:
|
) as p:
|
||||||
|
if stdout_callback:
|
||||||
|
for line in p.stdout:
|
||||||
|
stdout_callback(line)
|
||||||
|
|
||||||
p.communicate()
|
p.communicate()
|
||||||
return p.returncode
|
return p.returncode
|
||||||
|
|
||||||
|
@ -65,14 +70,14 @@ def vm_scp_args(vm_info):
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def host_exec(args):
|
def host_exec(args, stdout_callback=None):
|
||||||
args_str = " ".join(pipes.quote(s) for s in args)
|
args_str = " ".join(pipes.quote(s) for s in args)
|
||||||
print("> " + args_str)
|
print("> " + args_str)
|
||||||
|
|
||||||
return exec(args)
|
return exec(args, stdout_callback)
|
||||||
|
|
||||||
|
|
||||||
def vm_exec(args, vm_info):
|
def vm_exec(args, vm_info, stdout_callback=None):
|
||||||
if container_tech == "dangerzone-vm" and vm_info is None:
|
if container_tech == "dangerzone-vm" and vm_info is None:
|
||||||
print("--vm-info-path required on this platform")
|
print("--vm-info-path required on this platform")
|
||||||
return
|
return
|
||||||
|
@ -81,7 +86,7 @@ def vm_exec(args, vm_info):
|
||||||
print("VM > " + args_str)
|
print("VM > " + args_str)
|
||||||
|
|
||||||
args = vm_ssh_args(vm_info) + args
|
args = vm_ssh_args(vm_info) + args
|
||||||
return exec(args)
|
return exec(args, stdout_callback)
|
||||||
|
|
||||||
|
|
||||||
def vm_mkdir(vm_info):
|
def vm_mkdir(vm_info):
|
||||||
|
@ -106,14 +111,14 @@ def vm_download(guest_path, host_path, vm_info):
|
||||||
host_exec(args)
|
host_exec(args)
|
||||||
|
|
||||||
|
|
||||||
def exec_container(args, vm_info=None):
|
def exec_container(args, vm_info=None, stdout_callback=None):
|
||||||
if container_tech == "dangerzone-vm" and vm_info is None:
|
if container_tech == "dangerzone-vm" and vm_info is None:
|
||||||
print("Invalid VM info")
|
print("Invalid VM info")
|
||||||
return
|
return
|
||||||
|
|
||||||
if container_tech == "dangerzone-vm":
|
if container_tech == "dangerzone-vm":
|
||||||
args = ["/usr/bin/podman"] + args
|
args = ["/usr/bin/podman"] + args
|
||||||
return vm_exec(args, vm_info)
|
return vm_exec(args, vm_info, stdout_callback)
|
||||||
else:
|
else:
|
||||||
if container_tech == "podman":
|
if container_tech == "podman":
|
||||||
container_runtime = shutil.which("podman")
|
container_runtime = shutil.which("podman")
|
||||||
|
@ -121,7 +126,7 @@ def exec_container(args, vm_info=None):
|
||||||
container_runtime = shutil.which("docker")
|
container_runtime = shutil.which("docker")
|
||||||
|
|
||||||
args = [container_runtime] + args
|
args = [container_runtime] + args
|
||||||
return host_exec(args)
|
return host_exec(args, stdout_callback)
|
||||||
|
|
||||||
|
|
||||||
def load_vm_info(vm_info_path):
|
def load_vm_info(vm_info_path):
|
||||||
|
@ -132,7 +137,7 @@ def load_vm_info(vm_info_path):
|
||||||
return json.loads(f.read())
|
return json.loads(f.read())
|
||||||
|
|
||||||
|
|
||||||
def convert(global_common, input_filename, output_filename, ocr_lang):
|
def convert(global_common, input_filename, output_filename, ocr_lang, stdout_callback):
|
||||||
success = False
|
success = False
|
||||||
|
|
||||||
container_name = "dangerzone.rocks/dangerzone"
|
container_name = "dangerzone.rocks/dangerzone"
|
||||||
|
@ -183,7 +188,7 @@ def convert(global_common, input_filename, output_filename, ocr_lang):
|
||||||
container_name,
|
container_name,
|
||||||
"document-to-pixels",
|
"document-to-pixels",
|
||||||
]
|
]
|
||||||
ret = exec_container(args, vm_info)
|
ret = exec_container(args, vm_info, stdout_callback)
|
||||||
if ret != 0:
|
if ret != 0:
|
||||||
print("documents-to-pixels failed")
|
print("documents-to-pixels failed")
|
||||||
else:
|
else:
|
||||||
|
@ -205,7 +210,7 @@ def convert(global_common, input_filename, output_filename, ocr_lang):
|
||||||
container_name,
|
container_name,
|
||||||
"pixels-to-pdf",
|
"pixels-to-pdf",
|
||||||
]
|
]
|
||||||
ret = exec_container(args, vm_info)
|
ret = exec_container(args, vm_info, stdout_callback)
|
||||||
if ret != 0:
|
if ret != 0:
|
||||||
print("pixels-to-pdf failed")
|
print("pixels-to-pdf failed")
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in a new issue