首页 > 解决方案 > 通过 .bat 文件将参数传递给由“PyInstaller”转换的 .exe 文件

问题描述

通过 .bat 文件将参数传递给由 PyInstaller 转换的 .exe 文件时出现错误在我的 python 脚本中,我导入了以下库:

import time
from contextlib import closing
from PIL import Image
import subprocess
from audiotsm import phasevocoder
from audiotsm.io.wav import WavReader, WavWriter
from scipy.io import wavfile
import numpy as np
import re
import math
from shutil import copyfile, rmtree
import os
import argparse
from pytube import YouTube
import cv2
from datetime import datetime
import datetime
import os.path
import shutil
import webbrowser

这是我的 .bat 文件内容:

mode con: cols=100 lines=40
@echo off
COLOR 0A
title VideoCuts 
:LOOP
if "%~1"=="" goto :END
ShortCut.exe --input_file "%~1" --silent_threshold 0.1 --silent_speed 9999999.00 --frame_margin 5 --sample_rate 48000 --frame_quality 1 --output_file "%~n1_%date:~-10,2%%date:~-7,2%%date:~-4,4%_%time:~0,2%%time:~3,2%%time:~6,2%_videocuts.mp4"
pause

我还使用这个 .bat 文件进行了测试:

ShortCut.exe --input_file="%~1" --silent_threshold=0.1 --silent_speed=9999999.00 --frame_margin=5 --sample_rate=48000 --frame_quality=1 --output_file="videocuts.mp4"

这是我在处理过程中的错误消息图像

标签: pythonpython-3.xbatch-fileffmpegpyinstaller

解决方案


当您创建问题的最小可重现示例时,更容易回答问题。

在 bat 脚本中执行命令的回显。例如,在您的 bat 文件中,在执行ShortCut.exe

echo "ShortCut.exe --input_file="%~1" --silent_threshold=0.1 --silent_speed=9999999.00 --frame_margin=5 --sample_rate=48000 --frame_quality=1 --output_file="videocuts.mp4""

如果使用正确的参数调用可执行文件,这将为您提供信息。根据您在 py 文件中实现它的方式,可能存在查找此输入文件并echo在运行它之前输入命令的问题,这可能是解决它的完美方法。

正如pyinstaller文档所提到的,您还可以编写 if 条件,说明可执行文件何时被冻结(Exe 形式)以及何时从 IDE 运行

import sys
if getattr( sys, 'frozen', False ) :
    # running in a exe form
else :
    # running on your IDE (eg. Pycharm)

推荐阅读