私は、scpを介してリモートサーバーからローカルディレクトリにファイルをコピーするPythonスクリプトを作成しようとしています。
これをOpenELECディストリビューションで実行しているため(最小のHTPC linuxディストリビューション、userhomeを除く読み取り専用ファイルシステムでは、python sshモジュールをインストールするのは実用的ではありません)、これは醜く、os経由でscpコマンドにファイル名を渡すだけです。 。システム。
SCPCopy = "scp -c blowfish -C user@host:\"" + pipes.quote(file) + "\" /storage/downloads/incoming/"
SCPCopy = SCPCopy.replace('\n','')
os.system(SCPCopy)
これは、アポストロフィを含むファイル名を除いて機能します。
以下は、アポストロフィを含むファイルでos.systemに渡されるものの例です。
scp -c blowfish -C user@host:"'/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)を捨てて、アポストロフィを/'に置き換えることを実験しましたが、それでもどこにも行き着きません。