Pythonでリモートホストへファイル転送を使う場合に、いくつか選択肢があります。
- os.systemでscpコマンドを使う
- subprocess.Popenでscpコマンドを使う
- Paramikoを使ったPure python scp module
今回はFabricのfabric.api.put
モジュールをPythonのプログラムから利用してSFTP転送を試してみます。
Pythonスクリプト
SSHの設定情報をPythonファイルにします。JSONやYAMLを使わなくてもPythonの辞書はそのまま設定ファイルになります。
# -*- coding: utf-8 -*- |
ファイル転送のスクリプトを用意します。
# -*- coding: utf-8 -*- |
まとめ
Fabricは通常fabコマンドで実行するのですが、APIを使ってPythonのプログラムからも実行できます。
私はPython ETL
のプログラムの中でファイル転送にFabicのAPIを利用しています。
PythonのSQLSoupでDBからクエリしてゴニョゴニョ前処理した後、CSVファイルを作成します。
作成したCSVを同じPythonプログラムの中から手軽にリモートホストにCSVを転送できると便利です。
Fabricを使っているので、CSVを転送した後、リモートホストで行いたい処理もrunで記述できます。
カジュアルなPython ETL
の用途では十分だと思います。