2011-12-20 2 views
0

데이터베이스에서 쿼리 결과를 가져와 파일에 쓰고 파일을 다른 서버로 보내주는 작은 Python 스크립트를 작성하려고합니다. 조각은 잘 작동하지만 필자는 파일을 작성한 직후에 파일을 sftp하려고 할 때 이상한 오류가 발생합니다.Python/Paramiko에서 SFTP 오류가 발생했습니다.

내가지고있어 오류가

File "/usr/lib/python2.4/site-packages/paramiko/sftp_client.py", line 558, in put 
file_size = os.stat(localpath).st_size 
TypeError: coercing to Unicode: need string or buffer, file found 

코드의 잘못된 라인은 그냥 대신에 기록되고있는 하나의 출력 파일의 복사본을 사용하여 시도

sftp.put(outputfile, sftpoutputfile) 

입니다 스크립트와 그것이 예상했던대로 정확하게 작동합니다. 파일을 작성한 후 (그리고 sftp를 설정하기 전에) file.close()을 호출하려고합니다. 그러면 파일이 잘 보이고 닫혀 있어야하며 사용 가능한 것처럼 보입니다. 누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까? 도움이된다면 더 많은 코드를 게시 할 수 있습니다. 고맙습니다.

답변

1

오류 메시지는이 경우 (이 경우 os.stat) stringlike 개체를 원한다는 것을 알려주고 대신 파일을 제공합니다. paramiko의 내 사본 sftp_client.py의 소스를 보면

, 우리는
def put(self, localpath, remotepath, callback=None, confirm=True): 
    [...] 
    file_size = os.stat(localpath).st_size 
    fl = file(localpath, 'rb') 
    try: 
     fr = self.file(remotepath, 'wb') 
     fr.set_pipelined(True) 

그래서 나는 그것이 파일 이름이 아닌 파일 자체를 원한다는 것을 확신 참조하십시오.

+0

아, 보니 - 파일에 쓰면 문자열이 아닌 파일이됩니다. 나는 너무 많은 PHP를 해왔다. 신속한 답변을 해주셔서 대단히 감사합니다. – moexu

관련 문제