我正处于学习python的早期阶段,并关注各种在线/培训视频。
我正在使用Windows中的PyCharms运行Python 3.4.x x64。
在这个学习如何使用pysftp的特定示例中,示例脚本首先将文件上传到服务器,然后第二部分是从服务器下载文件。
第一部分(将文件上传到服务器)运作完美。该功能现已注释掉。该脚本的第二部分现在是从服务器下载此文件,并且脚本失败的位置。我使用的代码与我跟随的示例相同,所以我想知道我的系统是否遗漏了某些东西。
下面是脚本,下面是我在使用pdb:
在调试模式下运行时看到的错误import pysftp as sftp
#import pdb
def push_file_to_server():
s = sftp.Connection(host='192.168.2.36',
username ='root',
password='xxxxxxx')
local_path = "testme.txt"
remote_path = "/home/testme.txt"
s.put(local_path, remote_path)
s.close()
#push_file_to_server()
#pdb.set_trace()
def get_file_from_server():
s = sftp.Connection(host='192.168.2.36',
username ='root',
password='xxxxxxx')
local_path = "testme.txt"
remote_path = "/home/testme.txt"
s.get(remote_path, local_path)
s.close()
get_file_from_server()
当我使用调试运行脚本时,这是在调试输出中我看到错误的地方:
... ...
> c:\python34\lib\logging\__init__.py(1877)shutdown()
-> h.flush()
(Pdb) n
> c:\python34\lib\logging\__init__.py(1878)shutdown()
-> h.close()
(Pdb) n
> c:\python34\lib\logging\__init__.py(1886)shutdown()
-> h.release()
(Pdb) n
> c:\python34\lib\logging\__init__.py(1869)shutdown()
-> for wr in reversed(handlerList[:]):
(Pdb) n
--Return--
> c:\python34\lib\logging\__init__.py(1869)shutdown()->None
-> for wr in reversed(handlerList[:]):
(Pdb) n
--Call--
Exception ignored in: <function WeakSet.__init__.<locals>._remove at 0x0000000003154158>
Traceback (most recent call last):
File "C:\Python34\lib\_weakrefset.py", line 38, in _remove
File "C:\Python34\lib\bdb.py", line 50, in trace_dispatch
File "C:\Python34\lib\bdb.py", line 82, in dispatch_call
File "C:\Python34\lib\pdb.py", line 249, in user_call
File "C:\Python34\lib\pdb.py", line 345, in interaction
File "C:\Python34\lib\pdb.py", line 1447, in print_stack_entry
File "C:\Python34\lib\bdb.py", line 391, in format_stack_entry
File "<frozen importlib._bootstrap>", line 2236, in _find_and_load
File "<frozen importlib._bootstrap>", line 265, in __enter__
TypeError: 'NoneType' object is not callable
我稍微查了一下这个错误,因为我的知识有限,听起来似乎是在一个函数中缺少参数的时候抱怨,但我不知道该做什么不同而且第一部分是测试(上传)时脚本工作正常,这与刚刚颠倒的部分相同,使用get代替put。
提前感谢任何指导。
答案 0 :(得分:1)
Python是以空格分隔的,所以除非您正在处理递归函数,否则请更改
def get_file_from_server():
s = sftp.Connection(host='192.168.2.36',
username ='root',
password='xxxxxxx')
local_path = "testme.txt"
remote_path = "/home/testme.txt"
s.get(remote_path, local_path)
s.close()
get_file_from_server()
到
def get_file_from_server():
s = sftp.Connection(host='192.168.2.36',
username ='root',
password='xxxxxxx')
local_path = "testme.txt"
remote_path = "/home/testme.txt"
s.get(remote_path, local_path)
s.close()
get_file_from_server()