Pyinstaller -w exe 仍在 Windows 中打开终端

问题描述 投票:0回答:2

我运行此命令将脚本从 .py 转换为 .exe:

pyinstaller.exe -w -i .\icon.png --add-data='icon.png;.' .\gui_script.py

添加一些添加不当的软件包后,GUI 将通过我的 tkinter 脚本打开。但是,当我在 Windows 中使用 tkinter 窗口运行代码时,每次有 subprocess.run 或 os.system 函数时,它都会打开一个新的终端窗口。有什么办法可以抑制这些吗?或者至少让它们最小化或不引人注目?

这是 gui_script.py 的一部分,它组合了两个打开外部终端窗口的文件。

import os

os.system('copy cDNA.fa+ncRNA.fa transcriptome.fa /b')
python windows tkinter subprocess pyinstaller
2个回答
0
投票

我开始使用 python 工具来合并文件:

with open('transcriptome.fa','wb') as transcriptome_file:
        for fasta_file in ['cDNA.fa','ncRNA.fa']:
            with open(fasta_file,'rb') as current_fasta:
                shutil.copyfileobj(current_fasta, transcriptome_file)

以及下载较大的文件:

with requests.get('http://ftp.ensembl.org/pub/current_fasta/'+species+'/cdna/'+cDNA_file_name, stream=True) as cDNA_request:
        with open('cDNA.fa.gz', 'wb') as cDNA_gz_file:
            shutil.copyfileobj(cDNA_request.raw, cDNA_gz_file)

尽管如此,我仍然需要运行一个外部程序,所以我使用了 subprocess.run 和 createflag = subprocess.CREATE_NO_WINDOW 参数,如下所示:

if os.name == 'nt':
    blast_db_run = subprocess.run(['makeblastdb',
                            '-in', fasta_file,
                            '-dbtype', 'nucl',
                            '-out','blast_db'],
                            capture_output=True, 
                            creationflags = subprocess.CREATE_NO_WINDOW)

使用 if 语句,因为creationflags 显然在非 Windows 环境中不起作用。


0
投票

我在尝试打开

notepad
时遇到了同样的问题,但我设法使用
subprocess
解决了它。

subprocess.Popen(['notepad.exe', file_path], creationflags=subprocess.DETACHED_PROCESS)
© www.soinside.com 2019 - 2024. All rights reserved.