初めまして。
すでに質問の修正依頼があるように、putを実行しているにもかかわらず、
記載されているコードがgetになっているため、
こちらで仮に想定したサンプルコードを使って、解説しますね。
的外れだったら、ゴメンなさい。
ソースコードのディレクトリにtest.htmlがないとエラーとなってしまいます。
これはどんなプログラムでも基本的に同様な動作だと思います。
特別にPythonだけではなく、実行する場所にもよりますが、基本的には、実行ファイルがある場所が実行環境でのルートディレクトリとなると思えばいいかと思います。
test.htmlではなく、dir = /var/tmp/test.txt
のように変数にしたいです。
今回の質問内容は、この変数部分だと思いましたので、
指定されたディレクトリにあるファイルを送信するサンプルコードを書いてみました。
以上を踏まえたうえで、下記のサンプルコードを見ていただき、参考になれば幸いです。
Python
1#!/usr/bin/env python
2# coding=utf-8
3#############################
4# FileName: test.py
5#.
6#├── test.py
7#└── var
8# └── tmp
9# └── test.txt
10#############################
11## improt
12from ftplib import FTP_TLS
13
14## variable 変数
15ftp_serveraddress = '192.168.0.10'
16ftp_user = 'testuser'
17ftp_password = 'testpass'
18ftp_putdir = './var/tmp/'
19ftp_putfile = 'test.txt'
20
21def ftpput(host, username, password, putdir, putfile):
22 try:
23 ftp_putdir = "/"
24 _putfile = '%s%s' % (putdir, putfile)
25 print _putfile
26 print "FTP Start."
27 # FTPの場合
28 # _ftp = FTP(host)
29 _ftps = FTP_TLS(host)
30 # デバックログの出力 (0:なし /1:コマンド /2:詳細)
31 _ftps.set_debuglevel(1) # デバッグログがリアルタイムで確認できます。
32 _ftps.login(username, password)
33 print _ftps.getwelcome()
34 print "Login OK! : %s" % (_ftps)
35 _ftps.cwd(ftp_putdir)
36 print "File Open."
37 _file = open(_putfile, 'rb')
38 command = 'STOR %s' % putfile
39 _ftps.storlines(command, _file)
40 _file.close()
41 print _ftps.quit()
42 print "File UP Complete!"
43 except:
44 _ftps.quit()
45 print "ERR!! ftpput_failed :" + _putfile
46
47if __name__ == '__main__':
48 ftpput(ftp_serveraddress, ftp_user, ftp_password, ftp_putdir, ftp_putfile)
参考リンク先:
20.8. ftplib — FTP protocol client
解説
今回のポイントは、指定ディレクトリと送信ファイルを個別の変数に分けたことです。
分ける理由としては、FTPの接続先へ送る際のコード_ftps.storlines(command, _file)
で指定している「command」変数ですが、command = 'STOR %s' % putfile
で送信ファイル名(受信側で作成されるファイル名)を指定しないといけないためです。
Python
1...省略
2ftp_putdir = './var/tmp/'
3ftp_putfile = 'test.txt'
4...省略
5_putfile = '%s%s' % (putdir, putfile)
6...省略
7_file = open(_putfile, 'rb')
8command = 'STOR %s' % putfile
9_ftps.storlines(command, _file)
10...省略
11if __name__ == '__main__':
12 ftpput(ftp_serveraddress, ftp_user, ftp_password, ftp_putdir, ftp_putfile)
以上です。
今回は、セキュリティなども考慮し書いてますので、「FTPS」通信方式を採用してます。
解決となれば幸いです。