Magicode logo
Magicode
0
2 min read

subprocess + pyinstaller --noconsole

https://cdn.apollon.ai/media/notebox/blob_hpg6ypg
PyInstallerを利用した際、subprocess関連が入っているときにうまく動作しないことがあります。 エラーメッセージすら出ないので、なかなかの困りものです。 これを回避するための策を提示します。

以下の関数を定義

def subprocess_args(include_stdout=True):
    # The following is true only on Windows.
    if hasattr(subprocess, 'STARTUPINFO'):
        info = subprocess.STARTUPINFO()
        info.dwFlags |= subprocess.STARTF_USESHOWWINDOW
        env = os.environ
    else:
        info = None
        env = None
    
    if include_stdout:
        return {'stdout': subprocess.PIPE,
                'stdin': subprocess.PIPE,
                'stderr': subprocess.PIPE,
                'startupinfo': info,
                'env': env }
    else:
        return {'stdin': subprocess.PIPE,
                'stderr': subprocess.PIPE,
                'startupinfo': info,
                'env': env}

利用の仕方

def print_pdf(pdf_path):
    '''
    PDFの印刷ダイアログを表示させる
    '''
    acrobat_path = r"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
    command = f'"{acrobat_path}" /P "{pdf_path}"'
    proc = subprocess.run(command, **subprocess_args(True))
    return proc.stdout, proc.stderr

参考

Discussion

コメントにはログインが必要です。