为何多个os.system()调用仅执行首个?sstv命令执行问题求助
问题原因
你用了cmd /k执行命令,/k的作用是执行指定命令后保持命令行窗口打开,这会导致第一个os.system调用一直阻塞,程序无法继续执行后续命令。
解决方法
1. 替换/k为/c
cmd /c会在执行命令后自动关闭窗口,第一个命令执行完毕后,程序会继续走后续代码:
def processSegments(): os.system('''cmd /c "sstv -d AMEA_Transmission_0-1805600.wav -o AMEA_Data_Result_0-1805600.png"''') os.system('''cmd /c "sstv -d AMEA_Transmission_1805600-3625800.wav -o AMEA_Data_Result_1805600-3625800.png"''')
2. 批量处理优化
既然有多个分割后的音频文件,没必要手动写每个命令,用循环自动遍历处理更高效:
import glob def processSegments(): # 匹配所有分割后的音频文件 for audio_path in glob.glob("AMEA_Transmission_*.wav"): # 自动生成对应的输出图片路径 file_part = audio_path.split(".wav")[0] output_path = file_part.replace("Transmission", "Data_Result") + ".png" # 执行转换命令 os.system(f'''cmd /c "sstv -d {audio_path} -o {output_path}"''')
不管分割出多少个文件,都能自动处理,不用每次手动添加命令。
3. 进阶:用subprocess替代os.system
subprocess是Python官方推荐的替代os.system的工具,功能更完善,还能捕获命令执行状态:
import subprocess import glob def processSegments(): for audio_path in glob.glob("AMEA_Transmission_*.wav"): file_part = audio_path.split(".wav")[0] output_path = file_part.replace("Transmission", "Data_Result") + ".png" subprocess.run( ["sstv", "-d", audio_path, "-o", output_path], shell=True, check=True )
内容的提问来源于stack exchange,提问作者James Ervin
相关产品推荐
相关产品推荐

