我想寫一個python腳本通過scp將文件從遠程服務器複製到本地目錄。傳遞一個帶有撇號的文件名到scp使用python
因爲我在OpenELEC發行版上運行它(最小的HTPC linux發行版,除userhome之外的只讀文件系統使安裝python ssh模塊變得不切實際),我這樣做很醜,只是將文件名傳遞給scp命令通過os.system。
SCPCopy = "scp -c blowfish -C [email protected]:\"" + pipes.quote(file) + "\" /storage/downloads/incoming/"
SCPCopy = SCPCopy.replace('\n','')
os.system(SCPCopy)
這有效,除了包含撇號的文件名。
下面是什麼得到通過在一個文件中使用os.system用單引號的例子:
scp -c blowfish -C [email protected]:"'/media/sdi1/home/data/bob'"'"'s file.avi'" /storage/downloads/incoming/
和錯誤:
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
它看起來pipes.quote(x)的逃避撇號(因爲它應該),但顯然語法仍然不正確。我已經嘗試了澆水pipes.quote(x)並用/替換撇號,但是這並不能讓我獲得任何地方。
Python文檔說'pipes.quote'從版本1.6開始已被棄用! –
我試過不使用pipes.quote,只是用這樣的替換撇號:SCPCopy = SCPCopy.replace(「'」,「\'」) 但是,我得到了同樣的錯誤。 – evanjd
使用'shlex.quote'並且不要使用你自己的'\''。 –