我有一个奇怪的情况,我有一个方法用同一个方法两次从一个路径调用一个ffmpeg可执行文件——第一次是它工作的,第二次是它不工作,我也不知道为什么。
ffmpeg可执行文件位于路径
c:\GUI\My app\ffprobe.exe
我用密码打电话
for n in (self.file_numbers):
master_file = n + '.mxf' # eg C31_9213.mxf
# Get Metadata 1st time (WORKS)
self.mastermeta = self.getMetadata(master_file)
# Get metadata for connected parts (DOESNT WORK)
self.parts_meta = []
if master_file: # read parts from a sidecar file...
with open(sidecar, 'r') as sc:
# sidecar file contains paths - should split '/' lines into list
linelist = [line.strip() for line in sc]
self.parts_from_file = [p.split('/') for p in linelist]
# OPTION Check parts & get metadata list for parts
if self.parts_from_file:
for p in self.parts_from_file:
part = str(p[-1]) # the last index is a filename C63_4526.mxf
print(part, type(part)) # prints filename and type string identical to above example.
partmeta = self.getMetadata(part)
self.parts_meta.append(partmeta)
getmetadata函数(我第一次调用它时它就工作了)看起来像这样…
def getMetadata(self, master_file=None):
root = "{}/ffprobe.exe".format(self.program_root.replace('\\', '/')) # /path/to/exe
cmd = "{} -v quiet -print_format json -show_streams -show_format -sexagesimal".format(root)
args = shlex.split(cmd)
args.append(master_file)
# GETS META FOR MASTER FILES::::
# run the ffprobe process, decode stdout into utf-8 & convert to JSON
ffprobeOutput = subprocess.check_output(args).decode('utf-8')
ffprobeOutput = json.loads(ffprobeOutput)
... more ...
<returns a list>
我不会把可执行文件从
C:\我的应用程序\ffprobe.exe
,或更改
self.program_根目录
,如果我注释掉对getmetadata函数的第二个调用,它就会工作。
路径中的空间在第一次不会导致问题,但第二次出现错误,同一路径突然被shlex.split拆分为文件夹名称中空间的两部分…
*Traceback (most recent call last):
File "GUI_5.py", line 450, in <module>
gui = Main()
File "GUI_5.py", line 238, in __init__
self.setupUi(self)
File "GUI_5.py", line 155, in setupUi
self.openFolderDialog()
File "GUI_5.py", line 428, in openFolderDialog
partmeta = self.getMetadata(part)
File "GUI_5.py", line 292, in getMetadata
ffprobeOutput = subprocess.check_output(args).decode('utf-8')
File "c:\python35\Lib\subprocess.py", line 626, in check_output
**kwargs).stdout
File "c:\python35\Lib\subprocess.py", line 708, in run
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['C:/GUI/My', 'app/ffprobe.exe', '-v', 'quiet', '-print_format', 'json', '-show_streams', '-show
_format', '-sexagesimal', "C45_0031.mxf'"]' returned non-zero exit status 1*
有人知道为什么会这样吗?