IOError открытие существующего файла с Python - PullRequest
0 голосов
/ 24 февраля 2010

Запуск следующего кода:

import os
import datetime
import ftplib

currdate = datetime.datetime.now()
formatdate = currdate.strftime("%m-%d-%Y %H%M")

def log():

    fqn = os.uname()[1]
    ext_ip = urllib2.urlopen('http://whatismyip.org').read()
    log = open ('/Users/admin/Documents/locatelog.txt','w')
    log.write(str("Asset: %s " % fqn))
    log.write(str("Checking in from IP#: %s" % ext_ip))
    smush = str(fqn +' @ ' + formatdate)
    os.rename('/Users/admin/Documents/locatelog.txt','/Users/admin/Documents/%s.txt' %  smush )

    s = ftplib.FTP('10.7.1.71','username','password')
    f = open('/Users/admin/Documents/%s.txt' % smush,'r')
    s.storbinary("STOR /Users/admin/Documents/%s.txt" % smush,f)

Генерирует следующую ошибку:

ftplib.error_perm: 550 /Users/admin/Documents/678538.local @ 02-24-2010 1301.txt: No such file or directory

Я чувствую, что в этой строке что-то не так:

s.storbinary("STOR /Users/admin/Documents/%s.txt" % smush,f)

678538 - хост, на котором я тестирую ... используя Mac OS X 10.5 и Python 2.5.1

Ответы [ 3 ]

4 голосов
/ 24 февраля 2010

Разве это не должно быть f = open('/Users/admin/Documents/%s.txt' % smush,'r')? обратите внимание на / перед Users

Если вы не введете первый /, скрипт будет думать, что путь к файлу относительно текущего каталога (из которого запускается скрипт)

Редактировать

Я не слишком знаком с Python (я хочу), но не должен ли он быть:

s.storbinary('STOR /Users/admin/Documents/%s.txt' % smush,f)?

В вашем примере Python будет рассматривать вашу строку как литерал, и вы хотите интерполировать значение smush с% s

Редактировать 2 :

Существует ли на вашем сервере каталог /Users/admin/Documents/? Если нет, я думаю, вам придется создать их, прежде чем что-то копировать. (Так как сообщение об ошибке о некоторых файлах / папках отсутствует).

Вы можете сначала создать их самостоятельно. Запустите ваш скрипт. Если файл успешно скопирован, вы можете добавить создание каталогов из вашего скрипта.

1 голос
/ 24 февраля 2010

удаляет все пробелы из имени файла .eg в smush = str(fqn +' @ ' + formatdate), вы ставите пробел перед и после "@". ваш путь выглядит как

/Users/admin/Documents/something @ something

и при передаче его в ftplib у него могут быть проблемы. Другой способ - попробовать поставить кавычки, например

s.storbinary("STOR '/Users/admin/Documents/%s.txt'" % smush,f)
0 голосов
/ 24 февраля 2010

Редактировать:

Эта версия работает: проблема заключалась в том, что я писал в буфер, а не в файл.

import os
import urllib2
import datetime
import ftplib

currdate = datetime.datetime.now()
formatdate = currdate.strftime("%m-%d-%Y-%H%M")

def log():

    fqn = os.uname()[1]
    ext_ip = urllib2.urlopen('http://whatismyip.org').read()
    smush = str(fqn + formatdate)
    s = ftplib.FTP('10.7.1.71','username','password')
    f = open('/Users/admin/Documents/%s.txt' % smush,'w')
    f.write(str("Asset: %s " % fqn))
    f.write('\n')
    f.write(str("Checking in from IP#: %s" % ext_ip))
    f.write('\n')
    f.write(str("On: %s" % formatdate))
    f.close
    f = open('/Users/admin/Documents/%s.txt' % smush,'rb')
    s.storbinary('STOR %s.txt' % smush , f)
    s.close
    f.close
...