我运行此命令将脚本从 .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 工具来合并文件:
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 环境中不起作用。
我在尝试打开
notepad
时遇到了同样的问题,但我设法使用subprocess
解决了它。
subprocess.Popen(['notepad.exe', file_path], creationflags=subprocess.DETACHED_PROCESS)