在python中使用子进程会导致找不到文件

2024-09-29 06:32:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似“Nena-Nur getraeumt(1982)HD 0815007.mp3”的文件名,我可以在目录中看到它,但是在python子进程中,我的代码说找不到该文件。有没有一种方法可以绕过或编码字符串,使其能够找到文件?这是我的代码片段:

try:
    p = subprocess.Popen(["avconv" , "-y" , "-i" , upload_music_file , "-acodec" , "pcm_s16le" , process_file],  universal_newlines=True, stdout=subprocess.PIPE)
    out, err = p.communicate()
    retcode = p.wait()
except IOError:
    pass

假设upload_music_文件是“Nena-Nur getraeumt(1982)HD 0815007.mp3”,而process_file是“process”_音乐.mp3““

我得到了一个错误:

avconv version 0.8.12-6:0.8.12-1, Copyright (c) 2000-2014 the Libav developers built on Jun 1 2014 17:03:01 with gcc 4.7.2 /music/Nena - Nur getraeumt (1982) HD 0815007.mp3 : No such file or directory

只有当我想从档案中得到线索的时候: -bash:意外标记“(”附近出现语法错误

有没有一种方法可以处理upload_music_文件字符串以使其正常工作?在


Tags: 文件方法字符串代码musicprocessmp3file
2条回答

在我的例子中,如果在使用python时找不到文件,请检查文件名中是否有特殊的非打印字符。在

从文件名中删除所有回车符、换行符和换行符,您可以在linux上用ls-b检查其他字符,看看需要转义什么。在

因此,通常,当使用Popen或类似的东西时,您不希望依赖于相对路径。既然它存在,我将继续猜测这个错误不是一个错误,而是建议您使用绝对路径而不是相对路径,这是一个非常常见的问题。在

特别是,如果您当前以以下身份访问文件:

Nena - Nur getraeumt (1982) HD 0815007.mp3

我建议将其称为类似于:

^{pr2}$

但同样,只有你知道真正的绝对路径。在

另外,我建议从您的文件名中删除空格,因为它们的痛苦远远超过了它们的价值,但这是个人喜好的问题。在

至于bash错误,这在处理带有特殊字符的文件名时非常常见。您必须用反斜杠转义每个特殊字符,或者将文件名更改为更合理的名称:

Escaped: Nena\ -\ Nur\ getraeumt\ \(1982\)\ HD\ 0815007.mp3
More reasonable: Nena_Nur_getraeumt_1982_HD_0815007.mp3

相关问题 更多 >