😺
subprocess + pyinstaller --noconsole
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