[英]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.