Почему в runpy-модуле python sys.argv игнорируется при запуске другого модуля в подпроцессе?Есть ли альтернативный способ сделать это? - PullRequest
0 голосов
/ 21 мая 2019

У меня есть следующий класс, который пытается запустить экземпляр jupyter-lab с помощью runpy & concurrent.futures:

import logging
import runpy
import subprocess
import sys
from concurrent.futures import Future, ProcessPoolExecutor

import jupyterlab

argv = [
    # "--no-browser"
    "-h"
]

executor = ProcessPoolExecutor(2)


class Launcher(object):

    def startJupyter(self):
        _argv = argv

        oldArgv = sys.argv
        sys.argv = _argv

        try:
            runpy.run_module(jupyterlab.__name__, {}, "__main__")

        except Exception as e:
            logging.exception("Jupyter launching error")

        finally:
            sys.argv = oldArgv

    def startJupyter_Asynch(self) -> Future:

        ff: Future = executor.submit(self.startJupyter)
        return ff

Когда я вызываю Launcher.startJupyter_Asynch (), я обнаружил, что jupyterlab был запущен без отображения сообщения справки, почему sys.argv в этом случае игнорируется? Как это исправить?

Кроме того, я считаю, что должен быть лучший, канонический способ запуска модуля jupyterlab в другом процессе с использованием идентичных интерпретатора и среды python, но я не могу найти ни одного. Может ли кто-нибудь указать мне правильное направление?

...