Pergunta

Executando o seguinte código:

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)

Gera o seguinte erro:

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

Tenho a sensação de que algo está errado nesta linha:

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

678538 é o host que estou testando ... usando o Mac OS X 10.5 e o Python 2.5.1

Foi útil?

Solução 3

Editar:

Esta versão funciona: o problema era que eu estava escrevendo para buffer e não arquivar.

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

Outras dicas

Não deveria serf = open('/Users/admin/Documents/%s.txt' % smush,'r') ? Observe o / à frente de Users

Se você não colocar o primeiro /, o script pensará que o caminho para o arquivo é relativo ao diretório atual (de onde o script é executado)

Editar:

Não estou familiarizado com o python (eu desejo), mas não deveria ser:

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

No seu exemplo, o Python tratará sua corda como literal e você deseja interpolar o valor de Smush com %s

Editar 2:

Faz o diretório /Users/admin/Documents/ existe no seu servidor? Caso contrário, acho que você terá que criá -los antes de copiar qualquer coisa. (Como a mensagem de erro é sobre alguns arquivos/pastas ausentes).

Você pode criá -los primeiro primeiro. Execute seu script. Se o arquivo for copiado com sucesso, você poderá adicionar a criação dos diretórios do seu script.

Remova todos os espaços do nome do arquivo .eg em smush = str(fqn +' @ ' + formatdate), você está colocando um espaço na frente e depois de "@". seu caminho se parece

/Users/admin/Documents/something @ something

E quando você o passa para o ftplib, pode ter problemas. Outra maneira é tentar colocar cotações, por exemplo

s.storbinary("STOR '/Users/admin/Documents/%s.txt'" % smush,f)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top