Subprocess Python模块:不编写.csv,但如果命令单独运行,则会这样做。

问题描述 投票:1回答:1
我正在研究信号处理,当然也正在python中工作,但是我有一些matlab代码可以执行一些重要的预处理。我认为我可以使部分管道通过Matlab运行,而不是重写python。

我已经尝试通过subprocess python模块执行此操作,因为我知道我可以通过终端运行matlab。

我的问题:

    我从matlab代码获得的期望输出是一个.csv,可以在python中使用。但是,为什么我的python代码下面没有创建.csv?当我在终端中一个接一个地运行bash命令时,将创建文件。我还仔细检查了我的matlab语法和脚本,它们很好。
  • import subprocess myBashCommands = [] #we'll populate this list with our desired bash commands to get the smooth PSD. myBashCommands.append("cd /Applications/MATLAB_R2018b.app/bin") #go inside matlab package myBashCommands.append("./matlab -nodesktop") #now we're in matlab via terminal myBashCommands.append("potato_wav = audioread('potato-us.wav')") #create the .wav myBashCommands.append("[f, t, psd] = GetSpectrogram.m('potato_wav', 16000, 10)") #compute the spectrogram myBashCommands.append("smooth_psd = smoothn(10*log(psd), .5)") #smooth it myBashCommands.append("smooth_psd = SurfaceCubicInterpolator(smooth_psd)") #smooth the surface myBashCommands.append("dlmwrite('smooth_psd.csv', smooth_psd, 'precision', ',', 'precision', '%.10f')") #overwrite or create a new .csv in the folder subprocess.run(myBashCommands,stderr=PIPE, stdout=PIPE, shell = True, check = True) #run all of these
除成功完成的过程消息外,不返回任何内容。如果使用subprocess.call,则会返回0,也表示成功。

同样,当我在一个新的终端窗口中单独运行所有这些bash命令时,我成功获取了.csv。

关于使用子进程动态运行时为什么不创建.csv的任何想法?我需要此文件来接收任意的.wav文件,因此这似乎是最简单的方法,无需创建某种bash脚本即可。

我正在研究信号处理,当然也正在python中工作,但是我有一些matlab代码可以执行一些重要的预处理。而不是重写python,我以为我可以做一部分...

python bash matlab subprocess
1个回答
1
投票
subprocess是一个棘手的工具。首先要注意的是,每次对subprocess.run()的调用都将调用

one

© www.soinside.com 2019 - 2024. All rights reserved.