簡體   English   中英

在python中使用子進程導致找不到文件

[英]Using subprocess in python results in file not found

我有一個文件名,例如“ 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_file是“ Nena-Nur getraeumt(1982)HD 0815007.mp3”,而process_file是“ proccess_music.mp3”

我得到錯誤:

avconv版本0.8.12-6:0.8.12-1,版權所有(c)2000-2014 Libav開發人員於2014年6月1日17:03:01使用gcc 4.7.2 / music / Nena-Nur getraeumt(1982)HD 0815007.mp3:無此類文件或目錄

我唯一的提示是,當嘗試從bash中讀取文件時,它會得到:-bash:意外標記'('附近的語法錯誤

有沒有一種方法可以處理upload_music_file字符串,以便可以正常工作?

就我而言,如果在使用python時找不到該文件-請檢查文件名中是否有特殊的非打印字符。

從文件名中刪除所有回車以及換行符和換行符,然后可以使用ls -b在linux上檢查其他字符,以了解需要轉義的內容。

因此,通常,當使用Popen或類似的東西時,您不想依賴相對路徑。 既然存在,我將繼續猜測該錯誤不是錯字,而是建議您使用絕對路徑而不是相對路徑,這是一個非常常見的問題。

具體來說,如果您當前以以下方式訪問文件:

Nena - Nur getraeumt (1982) HD 0815007.mp3

我建議,而不是將其稱為類似於:

/home/user/music/Nena - Nur getraeumt (1982) HD 0815007.mp3

但是同樣,只有您會知道實際的絕對路徑。

另外,我建議您從文件名中刪除空格,因為空格比它們值得的要痛苦得多,但這是個人喜好問題。

至於bash錯誤,在處理帶有特殊字符的文件名時非常常見。 您要么用反斜杠轉義每個特殊字符,要么將文件名更改為更合理的名稱:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM