• 关于

    python 泄漏

    的搜索结果

回答

许多Python初学者都会问:我应该学习哪个版本的Python。对于这个问题,我的回答通常是“先选择一个最适合你的Python教程,教程中使用哪个版本的Python,你就用那个版本。等学得差不多了,再来研究不同版本之间的差别”。 许多Python初学者都会问:我应该学习哪个版本的Python。对于这个问题,我的回答通常是“先选择一个最适合你的Python教程,教程中使用哪个版本的Python,你就用那个版本。等学得差不多了,再来研究不同版本之间的差别”。但如果想要用Python开发一个新项目,那么该如何选择Python版本呢?我可以负责任的说,大部分Python库都同时支持Python 2.7.x和3.x版本的,所以不论选择哪个版本都是可以的。但为了在使用Python时避开某些版本中一些常见的陷阱,或需要移植某个Python项目时,依然有必要了解一下Python两个常见版本之间的主要区别。__future__模块Python 3.x引入了一些与Python 2不兼容的关键字和特性,在Python 2中,可以通过内置的__future__模块导入这些新内容。如果你希望在Python 2环境下写的代码也可以在Python 3.x中运行,那么建议使用__future__模块。例如,如果希望在Python 2中拥有Python 3.x的整数除法行为,可以通过下面的语句导入相应的模块。from future import division 下表列出了__future__中其他可导入的特性:特性 可选版本 强制版本 效果nested_scopes 2.1.0b1 2.2 PEP 227:Statically Nested Scopesgenerators 2.2.0a1 2.3 PEP 255:Simple Generatorsdivision 2.2.0a2 3.0 PEP 238:Changing the Division Operatorabsolute_import 2.5.0a1 3.0 PEP 328:Imports: Multi-Line and Absolute/Relativewith_statement 2.5.0a1 2.6 PEP 343:The “with” Statementprint_function 2.6.0a2 3.0 PEP 3105:Make print a functionunicode_literals 2.6.0a2 3.0 PEP 3112:Bytes literals in Python 3000(来源: https://docs.python.org/2/library/future.html)示例:from platform import python_version print函数虽然print语法是Python 3中一个很小的改动,且应该已经广为人知,但依然值得提一下:Python 2中的print语句被Python 3中的print()函数取代,这意味着在Python 3中必须用括号将需要输出的对象括起来。在Python 2中使用额外的括号也是可以的。但反过来在Python 3中想以Python2的形式不带括号调用print函数时,会触发SyntaxError。Python 2print 'Python', python_version() print 'Hello, World!' print('Hello, World!') print "text", ; print 'print more text on the same line' Python 2.7.6 Hello, World! Hello, World! text print more text on the same line Python 3print('Python', python_version()) print('Hello, World!') print("some text,", end="") print(' print more text on the same line') Python 3.4.1 Hello, World! some text, print more text on the same line print 'Hello, World!' File "", line 1 print 'Hello, World!' ^ SyntaxError: invalid syntax 注意:在Python中,带不带括号输出”Hello World”都很正常。但如果在圆括号中同时输出多个对象时,就会创建一个元组,这是因为在Python 2中,print是一个语句,而不是函数调用。print 'Python', python_version() print('a', 'b') print 'a', 'b' Python 2.7.7 ('a', 'b') a b 整数除法由于人们常常会忽视Python 3在整数除法上的改动(写错了也不会触发Syntax Error),所以在移植代码或在Python 2中执行Python 3的代码时,需要特别注意这个改动。所以,我还是会在Python 3的脚本中尝试用float(3)/2或 3/2.0代替3/2,以此来避免代码在Python 2环境下可能导致的错误(或与之相反,在Python 2脚本中用from future import division来使用Python 3的除法)。Python 2print 'Python', python_version() print '3 / 2 =', 3 / 2 print '3 // 2 =', 3 // 2 print '3 / 2.0 =', 3 / 2.0 print '3 // 2.0 =', 3 // 2.0 Python 2.7.6 3 / 2 = 1 3 // 2 = 1 3 / 2.0 = 1.5 3 // 2.0 = 1.0 Python 3print('Python', python_version()) print('3 / 2 =', 3 / 2) print('3 // 2 =', 3 // 2) print('3 / 2.0 =', 3 / 2.0) print('3 // 2.0 =', 3 // 2.0) Python 3.4.1 3 / 2 = 1.5 3 // 2 = 1 3 / 2.0 = 1.5 3 // 2.0 = 1.0 UnicodePython 2有基于ASCII的str()类型,其可通过单独的unicode()函数转成unicode类型,但没有byte类型。而在Python 3中,终于有了Unicode(utf-8)字符串,以及两个字节类:bytes和bytearrays。Python 2print 'Python', python_version() Python 2.7.6 print type(unicode('this is like a python3 str type')) print type(b'byte type does not exist') print 'they are really' + b' the same' they are really the same print type(bytearray(b'bytearray oddly does exist though')) Python 3print('Python', python_version()) print('strings are now utf-8 u03BCnicou0394é!') Python 3.4.1 strings are now utf-8 μnicoΔé! print('Python', python_version(), end="") print(' has', type(b' bytes for storing data')) Python 3.4.1 has print('and Python', python_version(), end="") print(' also has', type(bytearray(b'bytearrays'))) and Python 3.4.1 also has 'note that we cannot add a string' + b'bytes for data' TypeError Traceback (most recent call last) in () ----> 1 'note that we cannot add a string' + b'bytes for data' TypeError: Can't convert 'bytes' object to str implicitly xrange在Python 2.x中,经常会用xrange()创建一个可迭代对象,通常出现在“for循环”或“列表/集合/字典推导式”中。这种行为与生成器非常相似(如”惰性求值“),但这里的xrange-iterable无尽的,意味着可能在这个xrange上无限迭代。由于xrange的“惰性求知“特性,如果只需迭代一次(如for循环中),range()通常比xrange()快一些。不过不建议在多次迭代中使用range(),因为range()每次都会在内存中重新生成一个列表。在Python 3中,range()的实现方式与xrange()函数相同,所以就不存在专用的xrange()(在Python 3中使用xrange()会触发NameError)。import timeit n = 10000 def test_range(n): return for i in range(n): pass def test_xrange(n): for i in xrange(n): pass Python 2print 'Python', python_version() print 'ntiming range()' %timeit test_range(n) print 'nntiming xrange()' %timeit test_xrange(n) Python 2.7.6 timing range() 1000 loops, best of 3: 433 µs per loop timing xrange() 1000 loops, best of 3: 350 µs per loop Python 3print('Python', python_version()) print('ntiming range()') %timeit test_range(n) Python 3.4.1 timing range() 1000 loops, best of 3: 520 µs per loop print(xrange(10)) NameError Traceback (most recent call last) in () ----> 1 print(xrange(10)) NameError: name 'xrange' is not defined Python 3中的range对象中的__contains__方法另一个值得一提的是,在Python 3.x中,range有了一个新的__contains__方法。__contains__方法可以有效的加快Python 3.x中整数和布尔型的“查找”速度。x = 10000000 def val_in_range(x, val): return val in range(x) def val_in_xrange(x, val): return val in xrange(x) print('Python', python_version()) assert(val_in_range(x, x/2) == True) assert(val_in_range(x, x//2) == True) %timeit val_in_range(x, x/2) %timeit val_in_range(x, x//2) Python 3.4.1 1 loops, best of 3: 742 ms per loop 1000000 loops, best of 3: 1.19 µs per loop 根据上面的timeit的结果,查找整数比查找浮点数要快大约6万倍。但由于Python 2.x中的range或xrange没有__contains__方法,所以在Python 2中的整数和浮点数的查找速度差别不大。print 'Python', python_version() assert(val_in_xrange(x, x/2.0) == True) assert(val_in_xrange(x, x/2) == True) assert(val_in_range(x, x/2) == True) assert(val_in_range(x, x//2) == True) %timeit val_in_xrange(x, x/2.0) %timeit val_in_xrange(x, x/2) %timeit val_in_range(x, x/2.0) %timeit val_in_range(x, x/2) Python 2.7.7 1 loops, best of 3: 285 ms per loop 1 loops, best of 3: 179 ms per loop 1 loops, best of 3: 658 ms per loop 1 loops, best of 3: 556 ms per loop 下面的代码证明了Python 2.x中没有__contain__方法:print('Python', python_version()) range.__contains__ Python 3.4.1 print('Python', python_version()) range.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last) in () 1 print 'Python', python_version() ----> 2 range.__contains__ AttributeError: 'builtin_function_or_method' object has no attribute '__contains__' print('Python', python_version()) xrange.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last) in () 1 print 'Python', python_version() ----> 2 xrange.__contains__ AttributeError: type object 'xrange' has no attribute '__contains__' 关于Python 2中xrange()与Python 3中range()之间的速度差异的一点说明:有读者指出了Python 3中的range()和Python 2中xrange()执行速度有差异。由于这两者的实现方式相同,因此理论上执行速度应该也是相同的。这里的速度差别仅仅是因为Python 3的总体速度就比Python 2慢。def test_while(): i = 0 while i < 20000: i += 1 return print('Python', python_version()) %timeit test_while() Python 3.4.1 %timeit test_while() 100 loops, best of 3: 2.68 ms per loop print 'Python', python_version() %timeit test_while() Python 2.7.6 1000 loops, best of 3: 1.72 ms per loop 触发异常Python 2支持新旧两种异常触发语法,而Python 3只接受带括号的的语法(不然会触发SyntaxError):Python 2print 'Python', python_version()Python 2.7.6 raise IOError, "file error" IOError Traceback (most recent call last) in ()----> 1 raise IOError, "file error" IOError: file error raise IOError("file error") IOError Traceback (most recent call last) in ()----> 1 raise IOError("file error") IOError: file errorPython 3print('Python', python_version())Python 3.4.1raise IOError, "file error"File "", line 1raise IOError, "file error"^SyntaxError: invalid syntaxThe proper way to raise an exception in Python 3:print('Python', python_version())raise IOError("file error")Python 3.4.1 OSError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 raise IOError("file error") OSError: file error异常处理Python 3中的异常处理也发生了一点变化。在Python 3中必须使用“as”关键字。Python 2print 'Python', python_version()try: let_us_cause_a_NameError except NameError, err: print err, '--> our error message' Python 2.7.6name 'let_us_cause_a_NameError' is not defined --> our error messagePython 3print('Python', python_version())try: let_us_cause_a_NameError except NameError as err: print(err, '--> our error message') Python 3.4.1name 'let_us_cause_a_NameError' is not defined --> our error messagenext()函数和.next()方法由于会经常用到next()(.next())函数(方法),所以还要提到另一个语法改动(实现方面也做了改动):在Python 2.7.5中,函数形式和方法形式都可以使用,而在Python 3中,只能使用next()函数(试图调用.next()方法会触发AttributeError)。Python 2print 'Python', python_version()my_generator = (letter for letter in 'abcdefg')next(my_generator)my_generator.next()Python 2.7.6'b'Python 3print('Python', python_version())my_generator = (letter for letter in 'abcdefg')next(my_generator)Python 3.4.1'a' my_generator.next() AttributeError Traceback (most recent call last) in ()----> 1 my_generator.next() AttributeError: 'generator' object has no attribute 'next'For循环变量与全局命名空间泄漏好消息是:在Python 3.x中,for循环中的变量不再会泄漏到全局命名空间中了!这是Python 3.x中做的一个改动,在“What’s New In Python 3.0”中有如下描述:“列表推导不再支持[… for var in item1, item2, …]这样的语法,使用[… for var in (item1, item2, …)]代替。还要注意列表推导有不同的语义:现在列表推导更接近list()构造器中的生成器表达式这样的语法糖,特别要注意的是,循环控制变量不会再泄漏到循环周围的空间中了。”Python 2print 'Python', python_version() i = 1print 'before: i =', i print 'comprehension: ', [i for i in range(5)] print 'after: i =', iPython 2.7.6before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 4Python 3print('Python', python_version()) i = 1print('before: i =', i) print('comprehension:', [i for i in range(5)]) print('after: i =', i)Python 3.4.1before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 1比较无序类型Python 3中另一个优秀的改动是,如果我们试图比较无序类型,会触发一个TypeError。Python 2print 'Python', python_version()print "[1, 2] > 'foo' = ", [1, 2] > 'foo'print "(1, 2) > 'foo' = ", (1, 2) > 'foo'print "[1, 2] > (1, 2) = ", [1, 2] > (1, 2)Python 2.7.6[1, 2] > 'foo' = False(1, 2) > 'foo' = True[1, 2] > (1, 2) = FalsePython 3print('Python', python_version())print("[1, 2] > 'foo' = ", [1, 2] > 'foo')print("(1, 2) > 'foo' = ", (1, 2) > 'foo')print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2)) Python 3.4.1 TypeError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 print("[1, 2] > 'foo' = ", [1, 2] > 'foo')3 print("(1, 2) > 'foo' = ", (1, 2) > 'foo')4 print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2))TypeError: unorderable types: list() > str()通过input()解析用户的输入幸运的是,Python 3改进了input()函数,这样该函数就会总是将用户的输入存储为str对象。在Python 2中,为了避免读取非字符串类型会发生的一些危险行为,不得不使用raw_input()代替input()。Python 2Python 2.7.6[GCC 4.0.1 (Apple Inc. build 5493)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) my_input = raw_input('enter a number: ') enter a number: 123 type(my_input) Python 3Python 3.4.1[GCC 4.2.1 (Apple Inc. build 5577)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) 返回可迭代对象,而不是列表在xrange一节中可以看到,某些函数和方法在Python中返回的是可迭代对象,而不像在Python 2中返回列表。由于通常对这些对象只遍历一次,所以这种方式会节省很多内存。然而,如果通过生成器来多次迭代这些对象,效率就不高了。此时我们的确需要列表对象,可以通过list()函数简单的将可迭代对象转成列表。Python 2print 'Python', python_version() print range(3)print type(range(3))Python 2.7.6[0, 1, 2]Python 3print('Python', python_version())print(range(3))print(type(range(3)))print(list(range(3)))Python 3.4.1range(0, 3)[0, 1, 2]下面列出了Python 3中其他不再返回列表的常用函数和方法:zip()map()filter()字典的.key()方法字典的.value()方法字典的.item()方法 __future__模块 [回到目录] Python 3.x引入了一些与Python 2不兼容的关键字和特性,在Python 2中,可以通过内置的__future__模块导入这些新内容。如果你希望在Python 2环境下写的代码也可以在Python 3.x中运行,那么建议使用__future__模块。例如,如果希望在Python 2中拥有Python 3.x的整数除法行为,可以通过下面的语句导入相应的模块。 ? 1 from future import division 下表列出了__future__中其他可导入的特性: 特性 可选版本 强制版本 效果 nested_scopes 2.1.0b1 2.2 PEP 227:Statically Nested Scopes generators 2.2.0a1 2.3 PEP 255:Simple Generators division 2.2.0a2 3.0 PEP 238:Changing the Division Operator absolute_import 2.5.0a1 3.0 PEP 328:Imports: Multi-Line and Absolute/Relative with_statement 2.5.0a1 2.6 PEP 343:The “with” Statement print_function 2.6.0a2 3.0 PEP 3105:Make print a function unicode_literals 2.6.0a2 3.0 PEP 3112:Bytes literals in Python 3000 (来源: https://docs.python.org/2/library/future.html) 示例: ? 1 from platform import python_version print函数 [回到目录] 虽然print语法是Python 3中一个很小的改动,且应该已经广为人知,但依然值得提一下:Python 2中的print语句被Python 3中的print()函数取代,这意味着在Python 3中必须用括号将需要输出的对象括起来。 在Python 2中使用额外的括号也是可以的。但反过来在Python 3中想以Python2的形式不带括号调用print函数时,会触发SyntaxError。 Python 2 ? 1234 print 'Python', python_version()print 'Hello, World!'print('Hello, World!')print "text", ; print 'print more text on the same line' ? 1234 Python 2.7.6Hello, World!Hello, World!text print more text on the same line Python 3 ? 12345 print('Python', python_version())print('Hello, World!') print("some text,", end="") print(' print more text on the same line') ? 123 Python 3.4.1Hello, World!some text, print more text on the same line ? 1 print 'Hello, World!' ? File "", line 1print 'Hello, World!'^SyntaxError: invalid syntax 注意: 在Python中,带不带括号输出”Hello World”都很正常。但如果在圆括号中同时输出多个对象时,就会创建一个元组,这是因为在Python 2中,print是一个语句,而不是函数调用。 ? 123 print 'Python', python_version()print('a', 'b')print 'a', 'b' Python 2.7.7('a', 'b')a b 整数除法 [回到目录] 由于人们常常会忽视Python 3在整数除法上的改动(写错了也不会触发Syntax Error),所以在移植代码或在Python 2中执行Python 3的代码时,需要特别注意这个改动。 所以,我还是会在Python 3的脚本中尝试用float(3)/2或 3/2.0代替3/2,以此来避免代码在Python 2环境下可能导致的错误(或与之相反,在Python 2脚本中用from future import division来使用Python 3的除法)。 Python 2 ? 12345 print 'Python', python_version()print '3 / 2 =', 3 / 2print '3 // 2 =', 3 // 2print '3 / 2.0 =', 3 / 2.0print '3 // 2.0 =', 3 // 2.0 Python 2.7.63 / 2 = 13 // 2 = 13 / 2.0 = 1.53 // 2.0 = 1.0 Python 3 ? 12345 print('Python', python_version())print('3 / 2 =', 3 / 2)print('3 // 2 =', 3 // 2)print('3 / 2.0 =', 3 / 2.0)print('3 // 2.0 =', 3 // 2.0) Python 3.4.13 / 2 = 1.53 // 2 = 13 / 2.0 = 1.53 // 2.0 = 1.0 Unicode [回到目录] Python 2有基于ASCII的str()类型,其可通过单独的unicode()函数转成unicode类型,但没有byte类型。 而在Python 3中,终于有了Unicode(utf-8)字符串,以及两个字节类:bytes和bytearrays。 Python 2 ? 1 print 'Python', python_version() Python 2.7.6 ? 1 print type(unicode('this is like a python3 str type')) ? 1 print type(b'byte type does not exist') ? 1 print 'they are really' + b' the same' they are really the same ? 1 print type(bytearray(b'bytearray oddly does exist though')) Python 3 ? 12 print('Python', python_version())print('strings are now utf-8 u03BCnicou0394é!') Python 3.4.1strings are now utf-8 μnicoΔé! ? 12 print('Python', python_version(), end="")print(' has', type(b' bytes for storing data')) Python 3.4.1 has ? 12 print('and Python', python_version(), end="")print(' also has', type(bytearray(b'bytearrays'))) and Python 3.4.1 also has ? 1 'note that we cannot add a string' + b'bytes for data' TypeError Traceback (most recent call last) in ()----> 1 'note that we cannot add a string' + b'bytes for data' TypeError: Can't convert 'bytes' object to str implicitly xrange [回到目录] 在Python 2.x中,经常会用xrange()创建一个可迭代对象,通常出现在“for循环”或“列表/集合/字典推导式”中。 这种行为与生成器非常相似(如”惰性求值“),但这里的xrange-iterable无尽的,意味着可能在这个xrange上无限迭代。 由于xrange的“惰性求知“特性,如果只需迭代一次(如for循环中),range()通常比xrange()快一些。不过不建议在多次迭代中使用range(),因为range()每次都会在内存中重新生成一个列表。 在Python 3中,range()的实现方式与xrange()函数相同,所以就不存在专用的xrange()(在Python 3中使用xrange()会触发NameError)。 ? 12345678910 import timeit n = 10000def test_range(n): return for i in range(n): pass def test_xrange(n): for i in xrange(n): pass Python 2 ? 1234567 print 'Python', python_version() print 'ntiming range()'%timeit test_range(n) print 'nntiming xrange()'%timeit test_xrange(n) Python 2.7.6 timing range()1000 loops, best of 3: 433 µs per loop timing xrange()1000 loops, best of 3: 350 µs per loop Python 3 ? 1234 print('Python', python_version()) print('ntiming range()')%timeit test_range(n) Python 3.4.1 timing range()1000 loops, best of 3: 520 µs per loop ? 1 print(xrange(10)) NameError Traceback (most recent call last)in ()----> 1 print(xrange(10)) NameError: name 'xrange' is not defined Python 3中的range对象中的__contains__方法 另一个值得一提的是,在Python 3.x中,range有了一个新的__contains__方法。__contains__方法可以有效的加快Python 3.x中整数和布尔型的“查找”速度。 ? 123456789101112 x = 10000000def val_in_range(x, val): return val in range(x) def val_in_xrange(x, val): return val in xrange(x) print('Python', python_version())assert(val_in_range(x, x/2) == True)assert(val_in_range(x, x//2) == True)%timeit val_in_range(x, x/2)%timeit val_in_range(x, x//2) Python 3.4.11 loops, best of 3: 742 ms per loop1000000 loops, best of 3: 1.19 µs per loop 根据上面的timeit的结果,查找整数比查找浮点数要快大约6万倍。但由于Python 2.x中的range或xrange没有__contains__方法,所以在Python 2中的整数和浮点数的查找速度差别不大。 ? 12345678910 print 'Python', python_version() assert(val_in_xrange(x, x/2.0) == True)assert(val_in_xrange(x, x/2) == True)assert(val_in_range(x, x/2) == True)assert(val_in_range(x, x//2) == True)%timeit val_in_xrange(x, x/2.0)%timeit val_in_xrange(x, x/2)%timeit val_in_range(x, x/2.0)%timeit val_in_range(x, x/2) Python 2.7.71 loops, best of 3: 285 ms per loop1 loops, best of 3: 179 ms per loop1 loops, best of 3: 658 ms per loop1 loops, best of 3: 556 ms per loop 下面的代码证明了Python 2.x中没有__contain__方法: ? 12 print('Python', python_version())range.__contains__ Python 3.4.1 ? 12 print('Python', python_version())range.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last) in ()1 print 'Python', python_version()----> 2 range.__contains__ AttributeError: 'builtin_function_or_method' object has no attribute '__contains__' ? 12 print('Python', python_version())xrange.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last)in ()1 print 'Python', python_version()----> 2 xrange.__contains__ AttributeError: type object 'xrange' has no attribute '__contains__' 关于Python 2中xrange()与Python 3中range()之间的速度差异的一点说明: 有读者指出了Python 3中的range()和Python 2中xrange()执行速度有差异。由于这两者的实现方式相同,因此理论上执行速度应该也是相同的。这里的速度差别仅仅是因为Python 3的总体速度就比Python 2慢。 ? 12345 def test_while(): i = 0 while i < 20000: i += 1 return ? 12 print('Python', python_version())%timeit test_while() Python 3.4.1%timeit test_while()100 loops, best of 3: 2.68 ms per loop ? 12 print 'Python', python_version()%timeit test_while() Python 2.7.61000 loops, best of 3: 1.72 ms per loop 触发异常 [回到目录] Python 2支持新旧两种异常触发语法,而Python 3只接受带括号的的语法(不然会触发SyntaxError): Python 2 ? 1 print 'Python', python_version() Python 2.7.6 ? 1 raise IOError, "file error" IOError Traceback (most recent call last) in ()----> 1 raise IOError, "file error" IOError: file error ? 1 raise IOError("file error") IOError Traceback (most recent call last) in ()----> 1 raise IOError("file error") IOError: file error Python 3 ? 1 print('Python', python_version()) Python 3.4.1 ? 1 raise IOError, "file error" File "", line 1raise IOError, "file error"^SyntaxError: invalid syntaxThe proper way to raise an exception in Python 3: ? 12 print('Python', python_version())raise IOError("file error") Python 3.4.1 OSError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 raise IOError("file error") OSError: file error 异常处理 [回到目录] Python 3中的异常处理也发生了一点变化。在Python 3中必须使用“as”关键字。 Python 2 ? 12345 print 'Python', python_version()try: let_us_cause_a_NameErrorexcept NameError, err: print err, '--> our error message' Python 2.7.6name 'let_us_cause_a_NameError' is not defined --> our error message Python 3 ? 12345 print('Python', python_version())try: let_us_cause_a_NameErrorexcept NameError as err: print(err, '--> our error message') Python 3.4.1name 'let_us_cause_a_NameError' is not defined --> our error message next()函数和.next()方法 [回到目录] 由于会经常用到next()(.next())函数(方法),所以还要提到另一个语法改动(实现方面也做了改动):在Python 2.7.5中,函数形式和方法形式都可以使用,而在Python 3中,只能使用next()函数(试图调用.next()方法会触发AttributeError)。 Python 2 ? 1234 print 'Python', python_version()my_generator = (letter for letter in 'abcdefg')next(my_generator)my_generator.next() Python 2.7.6'b' Python 3 ? 123 print('Python', python_version())my_generator = (letter for letter in 'abcdefg')next(my_generator) Python 3.4.1'a' ? 1 my_generator.next() AttributeError Traceback (most recent call last) in ()----> 1 my_generator.next() AttributeError: 'generator' object has no attribute 'next' For循环变量与全局命名空间泄漏 [回到目录] 好消息是:在Python 3.x中,for循环中的变量不再会泄漏到全局命名空间中了! 这是Python 3.x中做的一个改动,在“What's New In Python 3.0”中有如下描述: “列表推导不再支持[... for var in item1, item2, ...]这样的语法,使用[... for var in (item1, item2, ...)]代替。还要注意列表推导有不同的语义:现在列表推导更接近list()构造器中的生成器表达式这样的语法糖,特别要注意的是,循环控制变量不会再泄漏到循环周围的空间中了。” Python 2 ? 12345678 print 'Python', python_version() i = 1print 'before: i =', i print 'comprehension: ', [i for i in range(5)] print 'after: i =', i Python 2.7.6before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 4 Python 3 ? 12345678 print('Python', python_version()) i = 1print('before: i =', i) print('comprehension:', [i for i in range(5)]) print('after: i =', i) Python 3.4.1before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 1 比较无序类型 [回到目录] Python 3中另一个优秀的改动是,如果我们试图比较无序类型,会触发一个TypeError。 Python 2 ? 1234 print 'Python', python_version()print "[1, 2] > 'foo' = ", [1, 2] > 'foo'print "(1, 2) > 'foo' = ", (1, 2) > 'foo'print "[1, 2] > (1, 2) = ", [1, 2] > (1, 2) Python 2.7.6[1, 2] > 'foo' = False(1, 2) > 'foo' = True[1, 2] > (1, 2) = False Python 3 ? 1234 print('Python', python_version())print("[1, 2] > 'foo' = ", [1, 2] > 'foo')print("(1, 2) > 'foo' = ", (1, 2) > 'foo')print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2)) Python 3.4.1 TypeError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 print("[1, 2] > 'foo' = ", [1, 2] > 'foo')3 print("(1, 2) > 'foo' = ", (1, 2) > 'foo')4 print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2))TypeError: unorderable types: list() > str() 通过input()解析用户的输入 [回到目录] 幸运的是,Python 3改进了input()函数,这样该函数就会总是将用户的输入存储为str对象。在Python 2中,为了避免读取非字符串类型会发生的一些危险行为,不得不使用raw_input()代替input()。 Python 2 ? 1234567891011121314151617 Python 2.7.6[GCC 4.0.1 (Apple Inc. build 5493)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) my_input = raw_input('enter a number: ') enter a number: 123 type(my_input) Python 3 ? 12345678 Python 3.4.1[GCC 4.2.1 (Apple Inc. build 5577)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) 返回可迭代对象,而不是列表 [回到目录] 在xrange一节中可以看到,某些函数和方法在Python中返回的是可迭代对象,而不像在Python 2中返回列表。 由于通常对这些对象只遍历一次,所以这种方式会节省很多内存。然而,如果通过生成器来多次迭代这些对象,效率就不高了。 此时我们的确需要列表对象,可以通过list()函数简单的将可迭代对象转成列表。 Python 2 ? 1234 print 'Python', python_version() print range(3)print type(range(3)) Python 2.7.6[0, 1, 2] Python 3 ? 1234 print('Python', python_version())print(range(3))print(type(range(3)))print(list(range(3))) Python 3.4.1range(0, 3)[0, 1, 2] 下面列出了Python 3中其他不再返回列表的常用函数和方法:•zip()•map()•filter()•字典的.key()方法•字典的.value()方法•字典的.item()方法 更多关于Python 2和Python 3的文章 [回到目录] 下面列出了其他一些可以进一步了解Python 2和Python 3的优秀文章, //迁移到 Python 3•Should I use Python 2 or Python 3 for my development activity?•What's New In Python 3.0•Porting to Python 3•Porting Python 2 Code to Python 3•How keep Python 3 moving forward // 对Python 3的褒与贬•10 awesome features of Python that you can't use because you refuse to upgrade to Python 3•关于你不想知道的所有Python3 unicode特性•Python 3 正在毁灭 Python•Python 3 能振兴 Python•Python 3 is fine
xuning715 2019-12-02 01:10:35 0 浏览量 回答数 0

回答

我敢打赌,第一次执行将以一个Python异常结束,该异常直到在第二次迭代中执行某个新的Python语句时才会被清除,因此它将立即失败。我建议修复内存泄漏并添加一些错误处理代码以获得一些诊断信息(无论哪种方式,这都很有用)。例如(还没试过,因为你没有提供一个可编译的例子,但以下应该不会太远): if (pFuncFrame && PyCallable_Check(pFuncFrame)) { PyObject* pArgs = PyTuple_New(1); PyTuple_SetItem(pArgs, 0, PyUnicode_FromString("img.bmp")); PyObject* res = PyObject_CallObject(pFuncFrame, pArgs); if (!res) { if (PyErr_Occurred()) PyErr_Print(); else std::cerr << "Python exception without error set\n"; } else { Py_DECREF(res); std::cout << "Called the frame function"; } Py_DECREF(pArgs); } else { std::cout << "Did not get the frame function"; }
kun坤 2019-12-26 15:40:06 0 浏览量 回答数 0

回答

主要是python占用了,Python程序没有运行完成不会主动归还的。你看下你的程序哪块是有问题的,优化一下代码吧 memory-report enable memory usage report. This will print in the request log information about RSS and address space usage. 开启内存使用情况报告。这将打印请求相关的内存和虚拟内存的使用情况。 max-requests 为每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,那么该工作进程就会被回收重用(重启)。你可以使用这个选项来默默地对抗内存泄漏(尽管这类情况使用reload-on-as和reload-on-rss选项更有用)。 [uwsgi]max-requests =1000 上述配置设置工作进程没处理1000个请求就会被回收重用。 UWSGI配置中文说明
珍宝珠 2019-12-02 03:08:59 0 浏览量 回答数 0

回答

内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。 有__del__()函数的对象间的循环引用是导致内存泄露的主凶。不使用一个对象时使用: del object 来删除一个对象的引用计数就可以有效防止内存泄露问题。 通过Python扩展模块gc 来查看不能回收的对象的详细信息。 可以通过 sys.getrefcount(obj) 来获取对象的引用计数,并根据返回值是否为0来判断是否内存泄露
珍宝珠 2019-12-02 03:12:47 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 简介 OSS FTP工具是一个特殊FTP server, 它接收普通FTP请求后,将对文件、文件夹的操作映射为对OSS的操作,从而使得您可以基于FTP协议来管理存储在OSS上的文件。 说明 生产环境请使用oss sdk, OSS FTP工具主要面向个人用户使用。 主要特性 跨平台:无论是Windows、Linux还是Mac, 无论是32位还是64位操作系统,无论是图形界面还是命令行都可以运行。 免安装: 解压后可直接运行。 免设置:无需设置即可运行。 透明化: FTP工具是python写的,您可以看到完整的源码,我们稍后也会开源到Github。 主要功能 支持文件和文件夹的上传、下载、删除等操作。 通过Multipart方式,分片上传大文件。 支持大部分FTP指令,可以满足日常FTP的使用需求。 说明 目前在1.0版本中,考虑到安装部署的简便,OSS FTP工具没有支持TLS加密。由于FTP协议是明文传输的,为了防止您的密码泄漏,建议将FTP server和client运行在同一台机器上,通过127.0.0.1:port的方式来访问。 不支持rename和move操作。 安装包解压后的路径不要含有中文。 FTP server的管理控制页面在低版本的IE中可能打不开。 FTP server支持的Python版本:Python2.6和Python2.7。 下载 Windows:ossftp-1.0.3-win.zip 由于Windows不会默认安装Python2.7,所以安装包中包含了Python2.7,免去您python安装配置的麻烦,解压即可使用。 Linux/Mac:ossftp-1.0.3-linux-mac.zip 由于Linux/Mac系统默认会安装Python2.7或Python2.6,所以安装包中不再包含可执行的python, 只包含了相关依赖库。 运行 首先解压之前下载的文件,然后根据环境情况选择不同的运行方式。 Windows: 双击运行start.vbs即可 Linux: 打开终端,运行$ bash start.sh Mac:双击start.command,或者在终端运行$ bash start.command 上述步骤会启动一个FTP server, 默认监听在127.0.0.1的2048端口。同时,为了方便您对FTP server的状态进行管控,还会启动一个web服务器,监听在127.0.0.1的8192端口。如果您的系统有图形界面,还会自动打开控制页面,如下所示: 说明 大部分情况不要任何配置,就可以运行一个FTP server了,如果想对FTP server进行配置, 请注意需要重启才能生效。 连接到FTP server 推荐使用FileZilla客户端去连接FTP server。下载安装后,按如下方式连接即可: 主机: 127.0.0.1 登录类型: 正常 用户:access_key_id/bucket_name 密码:access_key_secret 说明 用户中,/是必须的,如用户tSxyiUM3NKswPMEp/test-hz-jh-002。 access_key_id和access_key_secret的获取,请参见OSS访问控制。 高级使用 通过控制页面管理FTP server 修改监听地址 如果需要通过网络来访问FTP server, 那么需要修改监听地址,因为默认的监听地址127.0.0.1只允许来自本地的访问。可以修改成内网ip或公网ip。 修改监听端口 修改FTP server监听的端口, 建议端口大于1024, 因为监听1024以下的端口时需要管理员权限。 修改日志等级 设置FTP server的日志级别。FTP server的日志会输出到data/ossftp/目录下, 可以通过控制页面的日志按钮在线查看。默认的日志界别为INFO, 打印的日志信息较少,如果需要更详细的日志信息,可以修改为DEBUG模式。如果希望减少日志的输出,可以设置级别为WARNING或ERROR等。 设置Bucket endpoints FTP server默认会探索bucket的所属location信息,随后将请求发到对应的region(如oss-cn-hangzhou.aliyuncs.com或oss-cn-beijing.aliyuncs.com),FTP server会优先尝试内网访问oss。如果您设置了bucket endpoints, 如设置为test-bucket-a.oss-cn-hangzhou.aliyuncs.com, 那么当访问test-bucket-a时,就会使用oss-cn-hangzhou.aliyuncs.com域名。 设置显示语言 通过设置cn/en,可修改FTP控制页面的显示语言为中文/英文。 说明 所有修改都需要重启才能生效。 上述的所有修改其实都是修改的ftp根目录下的config.json, 所以您可以直接修改该文件。 直接启动FTP server(Linux/Mac) 可以直接启动ossftp目录下的ftpserver.py, 免去web_server的开销。 $ python ossftp/ftpserver.py &配置修改方式同上。 可能遇到的问题 如果连接FTP server时,遇到以下错误: 有两种可能: 输入的 access_key_id 和 access_key_secret有误。 解决:请输入正确的信息后再重试。 所用的access_key信息为ram 子账户的access_key,而子账户不具有List buckets权限。 解决:当使用子账户访问时,请在控制页面中指定bucket endpoints, 即告诉FTP server某个bucket应该用什么endpoint来访问。同时,子账户也需要一些必须的权限,关于使用ram访问oss时的访问控制,请参考文档访问控制。具体如下。 只读访问 OSS FTP工具需要的权限列表为 ListObjects、GetObject、HeadObject。关于如何创建一个具有只读访问的ram子账户,请参考图文教程如何结合ram实现文件共享。 上传文件 如果允许ram子账户上传文件,还需要PutObject。 删除文件 如果允许ram子账户删除文件,还需要DeleteObject。 如果您在Linux下运行FTP server,然后用FileZilla连接时遇到如下错误:501 can't decode path (server filesystem encoding is ANSI_X3.4-1968)一般是因为本地的中文编码有问题。在将要运行start.sh的终端中输入下面的命令,然后再重新启动即可。$ export LC_ALL=en_US.UTF-8; export LANG="en_US.UTF-8"; locale
2019-12-01 23:15:10 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 简介 OSS FTP工具是一个特殊FTP server, 它接收普通FTP请求后,将对文件、文件夹的操作映射为对OSS的操作,从而使得您可以基于FTP协议来管理存储在OSS上的文件。 说明 生产环境请使用oss sdk, OSS FTP工具主要面向个人用户使用。 主要特性 跨平台:无论是Windows、Linux还是Mac, 无论是32位还是64位操作系统,无论是图形界面还是命令行都可以运行。 免安装: 解压后可直接运行。 免设置:无需设置即可运行。 透明化: FTP工具是python写的,您可以看到完整的源码,我们稍后也会开源到Github。 主要功能 支持文件和文件夹的上传、下载、删除等操作。 通过Multipart方式,分片上传大文件。 支持大部分FTP指令,可以满足日常FTP的使用需求。 说明 目前在1.0版本中,考虑到安装部署的简便,OSS FTP工具没有支持TLS加密。由于FTP协议是明文传输的,为了防止您的密码泄漏,建议将FTP server和client运行在同一台机器上,通过127.0.0.1:port的方式来访问。 不支持rename和move操作。 安装包解压后的路径不要含有中文。 FTP server的管理控制页面在低版本的IE中可能打不开。 FTP server支持的Python版本:Python2.6和Python2.7。 下载 Windows:ossftp-1.0.3-win.zip 由于Windows不会默认安装Python2.7,所以安装包中包含了Python2.7,免去您python安装配置的麻烦,解压即可使用。 Linux/Mac:ossftp-1.0.3-linux-mac.zip 由于Linux/Mac系统默认会安装Python2.7或Python2.6,所以安装包中不再包含可执行的python, 只包含了相关依赖库。 运行 首先解压之前下载的文件,然后根据环境情况选择不同的运行方式。 Windows: 双击运行start.vbs即可 Linux: 打开终端,运行$ bash start.sh Mac:双击start.command,或者在终端运行$ bash start.command 上述步骤会启动一个FTP server, 默认监听在127.0.0.1的2048端口。同时,为了方便您对FTP server的状态进行管控,还会启动一个web服务器,监听在127.0.0.1的8192端口。如果您的系统有图形界面,还会自动打开控制页面,如下所示: 说明 大部分情况不要任何配置,就可以运行一个FTP server了,如果想对FTP server进行配置, 请注意需要重启才能生效。 连接到FTP server 推荐使用FileZilla客户端去连接FTP server。下载安装后,按如下方式连接即可: 主机: 127.0.0.1 登录类型: 正常 用户:access_key_id/bucket_name 密码:access_key_secret 说明 用户中,/是必须的,如用户tSxyiUM3NKswPMEp/test-hz-jh-002。 access_key_id和access_key_secret的获取,请参见OSS访问控制。 高级使用 通过控制页面管理FTP server 修改监听地址 如果需要通过网络来访问FTP server, 那么需要修改监听地址,因为默认的监听地址127.0.0.1只允许来自本地的访问。可以修改成内网ip或公网ip。 修改监听端口 修改FTP server监听的端口, 建议端口大于1024, 因为监听1024以下的端口时需要管理员权限。 修改日志等级 设置FTP server的日志级别。FTP server的日志会输出到data/ossftp/目录下, 可以通过控制页面的日志按钮在线查看。默认的日志界别为INFO, 打印的日志信息较少,如果需要更详细的日志信息,可以修改为DEBUG模式。如果希望减少日志的输出,可以设置级别为WARNING或ERROR等。 设置Bucket endpoints FTP server默认会探索bucket的所属location信息,随后将请求发到对应的region(如oss-cn-hangzhou.aliyuncs.com或oss-cn-beijing.aliyuncs.com),FTP server会优先尝试内网访问oss。如果您设置了bucket endpoints, 如设置为test-bucket-a.oss-cn-hangzhou.aliyuncs.com, 那么当访问test-bucket-a时,就会使用oss-cn-hangzhou.aliyuncs.com域名。 设置显示语言 通过设置cn/en,可修改FTP控制页面的显示语言为中文/英文。 说明 所有修改都需要重启才能生效。 上述的所有修改其实都是修改的ftp根目录下的config.json, 所以您可以直接修改该文件。 直接启动FTP server(Linux/Mac) 可以直接启动ossftp目录下的ftpserver.py, 免去web_server的开销。 $ python ossftp/ftpserver.py &配置修改方式同上。 可能遇到的问题 如果连接FTP server时,遇到以下错误: 有两种可能: 输入的 access_key_id 和 access_key_secret有误。 解决:请输入正确的信息后再重试。 所用的access_key信息为ram 子账户的access_key,而子账户不具有List buckets权限。 解决:当使用子账户访问时,请在控制页面中指定bucket endpoints, 即告诉FTP server某个bucket应该用什么endpoint来访问。同时,子账户也需要一些必须的权限,关于使用ram访问oss时的访问控制,请参考文档访问控制。具体如下。 只读访问 OSS FTP工具需要的权限列表为 ListObjects、GetObject、HeadObject。关于如何创建一个具有只读访问的ram子账户,请参考图文教程如何结合ram实现文件共享。 上传文件 如果允许ram子账户上传文件,还需要PutObject。 删除文件 如果允许ram子账户删除文件,还需要DeleteObject。 如果您在Linux下运行FTP server,然后用FileZilla连接时遇到如下错误:501 can't decode path (server filesystem encoding is ANSI_X3.4-1968)一般是因为本地的中文编码有问题。在将要运行start.sh的终端中输入下面的命令,然后再重新启动即可。$ export LC_ALL=en_US.UTF-8; export LANG="en_US.UTF-8"; locale
2019-12-01 23:15:13 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 简介 OSS FTP工具是一个特殊FTP server, 它接收普通FTP请求后,将对文件、文件夹的操作映射为对OSS的操作,从而使得您可以基于FTP协议来管理存储在OSS上的文件。 说明 生产环境请使用oss sdk, OSS FTP工具主要面向个人用户使用。 主要特性 跨平台:无论是Windows、Linux还是Mac, 无论是32位还是64位操作系统,无论是图形界面还是命令行都可以运行。 免安装: 解压后可直接运行。 免设置:无需设置即可运行。 透明化: FTP工具是python写的,您可以看到完整的源码,我们稍后也会开源到Github。 主要功能 支持文件和文件夹的上传、下载、删除等操作。 通过Multipart方式,分片上传大文件。 支持大部分FTP指令,可以满足日常FTP的使用需求。 说明 目前在1.0版本中,考虑到安装部署的简便,OSS FTP工具没有支持TLS加密。由于FTP协议是明文传输的,为了防止您的密码泄漏,建议将FTP server和client运行在同一台机器上,通过127.0.0.1:port的方式来访问。 不支持rename和move操作。 安装包解压后的路径不要含有中文。 FTP server的管理控制页面在低版本的IE中可能打不开。 FTP server支持的Python版本:Python2.6和Python2.7。 下载 Windows:ossftp-1.0.3-win.zip 由于Windows不会默认安装Python2.7,所以安装包中包含了Python2.7,免去您python安装配置的麻烦,解压即可使用。 Linux/Mac:ossftp-1.0.3-linux-mac.zip 由于Linux/Mac系统默认会安装Python2.7或Python2.6,所以安装包中不再包含可执行的python, 只包含了相关依赖库。 运行 首先解压之前下载的文件,然后根据环境情况选择不同的运行方式。 Windows: 双击运行start.vbs即可 Linux: 打开终端,运行$ bash start.sh Mac:双击start.command,或者在终端运行$ bash start.command 上述步骤会启动一个FTP server, 默认监听在127.0.0.1的2048端口。同时,为了方便您对FTP server的状态进行管控,还会启动一个web服务器,监听在127.0.0.1的8192端口。如果您的系统有图形界面,还会自动打开控制页面,如下所示: 说明 大部分情况不要任何配置,就可以运行一个FTP server了,如果想对FTP server进行配置, 请注意需要重启才能生效。 连接到FTP server 推荐使用FileZilla客户端去连接FTP server。下载安装后,按如下方式连接即可: 主机: 127.0.0.1 登录类型: 正常 用户:access_key_id/bucket_name 密码:access_key_secret 说明 用户中,/是必须的,如用户tSxyiUM3NKswPMEp/test-hz-jh-002。 access_key_id和access_key_secret的获取,请参见OSS访问控制。 高级使用 通过控制页面管理FTP server 修改监听地址 如果需要通过网络来访问FTP server, 那么需要修改监听地址,因为默认的监听地址127.0.0.1只允许来自本地的访问。可以修改成内网ip或公网ip。 修改监听端口 修改FTP server监听的端口, 建议端口大于1024, 因为监听1024以下的端口时需要管理员权限。 修改日志等级 设置FTP server的日志级别。FTP server的日志会输出到data/ossftp/目录下, 可以通过控制页面的日志按钮在线查看。默认的日志界别为INFO, 打印的日志信息较少,如果需要更详细的日志信息,可以修改为DEBUG模式。如果希望减少日志的输出,可以设置级别为WARNING或ERROR等。 设置Bucket endpoints FTP server默认会探索bucket的所属location信息,随后将请求发到对应的region(如oss-cn-hangzhou.aliyuncs.com或oss-cn-beijing.aliyuncs.com),FTP server会优先尝试内网访问oss。如果您设置了bucket endpoints, 如设置为test-bucket-a.oss-cn-hangzhou.aliyuncs.com, 那么当访问test-bucket-a时,就会使用oss-cn-hangzhou.aliyuncs.com域名。 设置显示语言 通过设置cn/en,可修改FTP控制页面的显示语言为中文/英文。 说明 所有修改都需要重启才能生效。 上述的所有修改其实都是修改的ftp根目录下的config.json, 所以您可以直接修改该文件。 直接启动FTP server(Linux/Mac) 可以直接启动ossftp目录下的ftpserver.py, 免去web_server的开销。 $ python ossftp/ftpserver.py &配置修改方式同上。 可能遇到的问题 如果连接FTP server时,遇到以下错误: 有两种可能: 输入的 access_key_id 和 access_key_secret有误。 解决:请输入正确的信息后再重试。 所用的access_key信息为ram 子账户的access_key,而子账户不具有List buckets权限。 解决:当使用子账户访问时,请在控制页面中指定bucket endpoints, 即告诉FTP server某个bucket应该用什么endpoint来访问。同时,子账户也需要一些必须的权限,关于使用ram访问oss时的访问控制,请参考文档访问控制。具体如下。 只读访问 OSS FTP工具需要的权限列表为 ListObjects、GetObject、HeadObject。关于如何创建一个具有只读访问的ram子账户,请参考图文教程如何结合ram实现文件共享。 上传文件 如果允许ram子账户上传文件,还需要PutObject。 删除文件 如果允许ram子账户删除文件,还需要DeleteObject。 如果您在Linux下运行FTP server,然后用FileZilla连接时遇到如下错误:501 can't decode path (server filesystem encoding is ANSI_X3.4-1968)一般是因为本地的中文编码有问题。在将要运行start.sh的终端中输入下面的命令,然后再重新启动即可。$ export LC_ALL=en_US.UTF-8; export LANG="en_US.UTF-8"; locale
2019-12-01 23:15:12 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 简介 OSS FTP工具是一个特殊FTP server, 它接收普通FTP请求后,将对文件、文件夹的操作映射为对OSS的操作,从而使得您可以基于FTP协议来管理存储在OSS上的文件。 说明 生产环境请使用oss sdk, OSS FTP工具主要面向个人用户使用。 主要特性 跨平台:无论是Windows、Linux还是Mac, 无论是32位还是64位操作系统,无论是图形界面还是命令行都可以运行。 免安装: 解压后可直接运行。 免设置:无需设置即可运行。 透明化: FTP工具是python写的,您可以看到完整的源码,我们稍后也会开源到Github。 主要功能 支持文件和文件夹的上传、下载、删除等操作。 通过Multipart方式,分片上传大文件。 支持大部分FTP指令,可以满足日常FTP的使用需求。 说明 目前在1.0版本中,考虑到安装部署的简便,OSS FTP工具没有支持TLS加密。由于FTP协议是明文传输的,为了防止您的密码泄漏,建议将FTP server和client运行在同一台机器上,通过127.0.0.1:port的方式来访问。 不支持rename和move操作。 安装包解压后的路径不要含有中文。 FTP server的管理控制页面在低版本的IE中可能打不开。 FTP server支持的Python版本:Python2.6和Python2.7。 下载 Windows:ossftp-1.0.3-win.zip 由于Windows不会默认安装Python2.7,所以安装包中包含了Python2.7,免去您python安装配置的麻烦,解压即可使用。 Linux/Mac:ossftp-1.0.3-linux-mac.zip 由于Linux/Mac系统默认会安装Python2.7或Python2.6,所以安装包中不再包含可执行的python, 只包含了相关依赖库。 运行 首先解压之前下载的文件,然后根据环境情况选择不同的运行方式。 Windows: 双击运行start.vbs即可 Linux: 打开终端,运行$ bash start.sh Mac:双击start.command,或者在终端运行$ bash start.command 上述步骤会启动一个FTP server, 默认监听在127.0.0.1的2048端口。同时,为了方便您对FTP server的状态进行管控,还会启动一个web服务器,监听在127.0.0.1的8192端口。如果您的系统有图形界面,还会自动打开控制页面,如下所示: 说明 大部分情况不要任何配置,就可以运行一个FTP server了,如果想对FTP server进行配置, 请注意需要重启才能生效。 连接到FTP server 推荐使用FileZilla客户端去连接FTP server。下载安装后,按如下方式连接即可: 主机: 127.0.0.1 登录类型: 正常 用户:access_key_id/bucket_name 密码:access_key_secret 说明 用户中,/是必须的,如用户tSxyiUM3NKswPMEp/test-hz-jh-002。 access_key_id和access_key_secret的获取,请参见OSS访问控制。 高级使用 通过控制页面管理FTP server 修改监听地址 如果需要通过网络来访问FTP server, 那么需要修改监听地址,因为默认的监听地址127.0.0.1只允许来自本地的访问。可以修改成内网ip或公网ip。 修改监听端口 修改FTP server监听的端口, 建议端口大于1024, 因为监听1024以下的端口时需要管理员权限。 修改日志等级 设置FTP server的日志级别。FTP server的日志会输出到data/ossftp/目录下, 可以通过控制页面的日志按钮在线查看。默认的日志界别为INFO, 打印的日志信息较少,如果需要更详细的日志信息,可以修改为DEBUG模式。如果希望减少日志的输出,可以设置级别为WARNING或ERROR等。 设置Bucket endpoints FTP server默认会探索bucket的所属location信息,随后将请求发到对应的region(如oss-cn-hangzhou.aliyuncs.com或oss-cn-beijing.aliyuncs.com),FTP server会优先尝试内网访问oss。如果您设置了bucket endpoints, 如设置为test-bucket-a.oss-cn-hangzhou.aliyuncs.com, 那么当访问test-bucket-a时,就会使用oss-cn-hangzhou.aliyuncs.com域名。 设置显示语言 通过设置cn/en,可修改FTP控制页面的显示语言为中文/英文。 说明 所有修改都需要重启才能生效。 上述的所有修改其实都是修改的ftp根目录下的config.json, 所以您可以直接修改该文件。 直接启动FTP server(Linux/Mac) 可以直接启动ossftp目录下的ftpserver.py, 免去web_server的开销。 $ python ossftp/ftpserver.py &配置修改方式同上。 可能遇到的问题 如果连接FTP server时,遇到以下错误: 有两种可能: 输入的 access_key_id 和 access_key_secret有误。 解决:请输入正确的信息后再重试。 所用的access_key信息为ram 子账户的access_key,而子账户不具有List buckets权限。 解决:当使用子账户访问时,请在控制页面中指定bucket endpoints, 即告诉FTP server某个bucket应该用什么endpoint来访问。同时,子账户也需要一些必须的权限,关于使用ram访问oss时的访问控制,请参考文档访问控制。具体如下。 只读访问 OSS FTP工具需要的权限列表为 ListObjects、GetObject、HeadObject。关于如何创建一个具有只读访问的ram子账户,请参考图文教程如何结合ram实现文件共享。 上传文件 如果允许ram子账户上传文件,还需要PutObject。 删除文件 如果允许ram子账户删除文件,还需要DeleteObject。 如果您在Linux下运行FTP server,然后用FileZilla连接时遇到如下错误:501 can't decode path (server filesystem encoding is ANSI_X3.4-1968)一般是因为本地的中文编码有问题。在将要运行start.sh的终端中输入下面的命令,然后再重新启动即可。$ export LC_ALL=en_US.UTF-8; export LANG="en_US.UTF-8"; locale
2019-12-01 23:15:12 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 简介 OSS FTP工具是一个特殊FTP server, 它接收普通FTP请求后,将对文件、文件夹的操作映射为对OSS的操作,从而使得您可以基于FTP协议来管理存储在OSS上的文件。 说明 生产环境请使用oss sdk, OSS FTP工具主要面向个人用户使用。 主要特性 跨平台:无论是Windows、Linux还是Mac, 无论是32位还是64位操作系统,无论是图形界面还是命令行都可以运行。 免安装: 解压后可直接运行。 免设置:无需设置即可运行。 透明化: FTP工具是python写的,您可以看到完整的源码,我们稍后也会开源到Github。 主要功能 支持文件和文件夹的上传、下载、删除等操作。 通过Multipart方式,分片上传大文件。 支持大部分FTP指令,可以满足日常FTP的使用需求。 说明 目前在1.0版本中,考虑到安装部署的简便,OSS FTP工具没有支持TLS加密。由于FTP协议是明文传输的,为了防止您的密码泄漏,建议将FTP server和client运行在同一台机器上,通过127.0.0.1:port的方式来访问。 不支持rename和move操作。 安装包解压后的路径不要含有中文。 FTP server的管理控制页面在低版本的IE中可能打不开。 FTP server支持的Python版本:Python2.6和Python2.7。 下载 Windows:ossftp-1.0.3-win.zip 由于Windows不会默认安装Python2.7,所以安装包中包含了Python2.7,免去您python安装配置的麻烦,解压即可使用。 Linux/Mac:ossftp-1.0.3-linux-mac.zip 由于Linux/Mac系统默认会安装Python2.7或Python2.6,所以安装包中不再包含可执行的python, 只包含了相关依赖库。 运行 首先解压之前下载的文件,然后根据环境情况选择不同的运行方式。 Windows: 双击运行start.vbs即可 Linux: 打开终端,运行$ bash start.sh Mac:双击start.command,或者在终端运行$ bash start.command 上述步骤会启动一个FTP server, 默认监听在127.0.0.1的2048端口。同时,为了方便您对FTP server的状态进行管控,还会启动一个web服务器,监听在127.0.0.1的8192端口。如果您的系统有图形界面,还会自动打开控制页面,如下所示: 说明 大部分情况不要任何配置,就可以运行一个FTP server了,如果想对FTP server进行配置, 请注意需要重启才能生效。 连接到FTP server 推荐使用FileZilla客户端去连接FTP server。下载安装后,按如下方式连接即可: 主机: 127.0.0.1 登录类型: 正常 用户:access_key_id/bucket_name 密码:access_key_secret 说明 用户中,/是必须的,如用户tSxyiUM3NKswPMEp/test-hz-jh-002。 access_key_id和access_key_secret的获取,请参见OSS访问控制。 高级使用 通过控制页面管理FTP server 修改监听地址 如果需要通过网络来访问FTP server, 那么需要修改监听地址,因为默认的监听地址127.0.0.1只允许来自本地的访问。可以修改成内网ip或公网ip。 修改监听端口 修改FTP server监听的端口, 建议端口大于1024, 因为监听1024以下的端口时需要管理员权限。 修改日志等级 设置FTP server的日志级别。FTP server的日志会输出到data/ossftp/目录下, 可以通过控制页面的日志按钮在线查看。默认的日志界别为INFO, 打印的日志信息较少,如果需要更详细的日志信息,可以修改为DEBUG模式。如果希望减少日志的输出,可以设置级别为WARNING或ERROR等。 设置Bucket endpoints FTP server默认会探索bucket的所属location信息,随后将请求发到对应的region(如oss-cn-hangzhou.aliyuncs.com或oss-cn-beijing.aliyuncs.com),FTP server会优先尝试内网访问oss。如果您设置了bucket endpoints, 如设置为test-bucket-a.oss-cn-hangzhou.aliyuncs.com, 那么当访问test-bucket-a时,就会使用oss-cn-hangzhou.aliyuncs.com域名。 设置显示语言 通过设置cn/en,可修改FTP控制页面的显示语言为中文/英文。 说明 所有修改都需要重启才能生效。 上述的所有修改其实都是修改的ftp根目录下的config.json, 所以您可以直接修改该文件。 直接启动FTP server(Linux/Mac) 可以直接启动ossftp目录下的ftpserver.py, 免去web_server的开销。 $ python ossftp/ftpserver.py &配置修改方式同上。 可能遇到的问题 如果连接FTP server时,遇到以下错误: 有两种可能: 输入的 access_key_id 和 access_key_secret有误。 解决:请输入正确的信息后再重试。 所用的access_key信息为ram 子账户的access_key,而子账户不具有List buckets权限。 解决:当使用子账户访问时,请在控制页面中指定bucket endpoints, 即告诉FTP server某个bucket应该用什么endpoint来访问。同时,子账户也需要一些必须的权限,关于使用ram访问oss时的访问控制,请参考文档访问控制。具体如下。 只读访问 OSS FTP工具需要的权限列表为 ListObjects、GetObject、HeadObject。关于如何创建一个具有只读访问的ram子账户,请参考图文教程如何结合ram实现文件共享。 上传文件 如果允许ram子账户上传文件,还需要PutObject。 删除文件 如果允许ram子账户删除文件,还需要DeleteObject。 如果您在Linux下运行FTP server,然后用FileZilla连接时遇到如下错误:501 can't decode path (server filesystem encoding is ANSI_X3.4-1968)一般是因为本地的中文编码有问题。在将要运行start.sh的终端中输入下面的命令,然后再重新启动即可。$ export LC_ALL=en_US.UTF-8; export LANG="en_US.UTF-8"; locale
2019-12-01 23:15:13 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 简介 OSS FTP工具是一个特殊FTP server, 它接收普通FTP请求后,将对文件、文件夹的操作映射为对OSS的操作,从而使得您可以基于FTP协议来管理存储在OSS上的文件。 说明 生产环境请使用oss sdk, OSS FTP工具主要面向个人用户使用。 主要特性 跨平台:无论是Windows、Linux还是Mac, 无论是32位还是64位操作系统,无论是图形界面还是命令行都可以运行。 免安装: 解压后可直接运行。 免设置:无需设置即可运行。 透明化: FTP工具是python写的,您可以看到完整的源码,我们稍后也会开源到Github。 主要功能 支持文件和文件夹的上传、下载、删除等操作。 通过Multipart方式,分片上传大文件。 支持大部分FTP指令,可以满足日常FTP的使用需求。 说明 目前在1.0版本中,考虑到安装部署的简便,OSS FTP工具没有支持TLS加密。由于FTP协议是明文传输的,为了防止您的密码泄漏,建议将FTP server和client运行在同一台机器上,通过127.0.0.1:port的方式来访问。 不支持rename和move操作。 安装包解压后的路径不要含有中文。 FTP server的管理控制页面在低版本的IE中可能打不开。 FTP server支持的Python版本:Python2.6和Python2.7。 下载 Windows:ossftp-1.0.3-win.zip 由于Windows不会默认安装Python2.7,所以安装包中包含了Python2.7,免去您python安装配置的麻烦,解压即可使用。 Linux/Mac:ossftp-1.0.3-linux-mac.zip 由于Linux/Mac系统默认会安装Python2.7或Python2.6,所以安装包中不再包含可执行的python, 只包含了相关依赖库。 运行 首先解压之前下载的文件,然后根据环境情况选择不同的运行方式。 Windows: 双击运行start.vbs即可 Linux: 打开终端,运行$ bash start.sh Mac:双击start.command,或者在终端运行$ bash start.command 上述步骤会启动一个FTP server, 默认监听在127.0.0.1的2048端口。同时,为了方便您对FTP server的状态进行管控,还会启动一个web服务器,监听在127.0.0.1的8192端口。如果您的系统有图形界面,还会自动打开控制页面,如下所示: 说明 大部分情况不要任何配置,就可以运行一个FTP server了,如果想对FTP server进行配置, 请注意需要重启才能生效。 连接到FTP server 推荐使用FileZilla客户端去连接FTP server。下载安装后,按如下方式连接即可: 主机: 127.0.0.1 登录类型: 正常 用户:access_key_id/bucket_name 密码:access_key_secret 说明 用户中,/是必须的,如用户tSxyiUM3NKswPMEp/test-hz-jh-002。 access_key_id和access_key_secret的获取,请参见OSS访问控制。 高级使用 通过控制页面管理FTP server 修改监听地址 如果需要通过网络来访问FTP server, 那么需要修改监听地址,因为默认的监听地址127.0.0.1只允许来自本地的访问。可以修改成内网ip或公网ip。 修改监听端口 修改FTP server监听的端口, 建议端口大于1024, 因为监听1024以下的端口时需要管理员权限。 修改日志等级 设置FTP server的日志级别。FTP server的日志会输出到data/ossftp/目录下, 可以通过控制页面的日志按钮在线查看。默认的日志界别为INFO, 打印的日志信息较少,如果需要更详细的日志信息,可以修改为DEBUG模式。如果希望减少日志的输出,可以设置级别为WARNING或ERROR等。 设置Bucket endpoints FTP server默认会探索bucket的所属location信息,随后将请求发到对应的region(如oss-cn-hangzhou.aliyuncs.com或oss-cn-beijing.aliyuncs.com),FTP server会优先尝试内网访问oss。如果您设置了bucket endpoints, 如设置为test-bucket-a.oss-cn-hangzhou.aliyuncs.com, 那么当访问test-bucket-a时,就会使用oss-cn-hangzhou.aliyuncs.com域名。 设置显示语言 通过设置cn/en,可修改FTP控制页面的显示语言为中文/英文。 说明 所有修改都需要重启才能生效。 上述的所有修改其实都是修改的ftp根目录下的config.json, 所以您可以直接修改该文件。 直接启动FTP server(Linux/Mac) 可以直接启动ossftp目录下的ftpserver.py, 免去web_server的开销。 $ python ossftp/ftpserver.py &配置修改方式同上。 可能遇到的问题 如果连接FTP server时,遇到以下错误: 有两种可能: 输入的 access_key_id 和 access_key_secret有误。 解决:请输入正确的信息后再重试。 所用的access_key信息为ram 子账户的access_key,而子账户不具有List buckets权限。 解决:当使用子账户访问时,请在控制页面中指定bucket endpoints, 即告诉FTP server某个bucket应该用什么endpoint来访问。同时,子账户也需要一些必须的权限,关于使用ram访问oss时的访问控制,请参考文档访问控制。具体如下。 只读访问 OSS FTP工具需要的权限列表为 ListObjects、GetObject、HeadObject。关于如何创建一个具有只读访问的ram子账户,请参考图文教程如何结合ram实现文件共享。 上传文件 如果允许ram子账户上传文件,还需要PutObject。 删除文件 如果允许ram子账户删除文件,还需要DeleteObject。 如果您在Linux下运行FTP server,然后用FileZilla连接时遇到如下错误:501 can't decode path (server filesystem encoding is ANSI_X3.4-1968)一般是因为本地的中文编码有问题。在将要运行start.sh的终端中输入下面的命令,然后再重新启动即可。$ export LC_ALL=en_US.UTF-8; export LANG="en_US.UTF-8"; locale
2019-12-01 23:15:11 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 简介 OSS FTP工具是一个特殊FTP server, 它接收普通FTP请求后,将对文件、文件夹的操作映射为对OSS的操作,从而使得您可以基于FTP协议来管理存储在OSS上的文件。 说明 生产环境请使用oss sdk, OSS FTP工具主要面向个人用户使用。 主要特性 跨平台:无论是Windows、Linux还是Mac, 无论是32位还是64位操作系统,无论是图形界面还是命令行都可以运行。 免安装: 解压后可直接运行。 免设置:无需设置即可运行。 透明化: FTP工具是python写的,您可以看到完整的源码,我们稍后也会开源到Github。 主要功能 支持文件和文件夹的上传、下载、删除等操作。 通过Multipart方式,分片上传大文件。 支持大部分FTP指令,可以满足日常FTP的使用需求。 说明 目前在1.0版本中,考虑到安装部署的简便,OSS FTP工具没有支持TLS加密。由于FTP协议是明文传输的,为了防止您的密码泄漏,建议将FTP server和client运行在同一台机器上,通过127.0.0.1:port的方式来访问。 不支持rename和move操作。 安装包解压后的路径不要含有中文。 FTP server的管理控制页面在低版本的IE中可能打不开。 FTP server支持的Python版本:Python2.6和Python2.7。 下载 Windows:ossftp-1.0.3-win.zip 由于Windows不会默认安装Python2.7,所以安装包中包含了Python2.7,免去您python安装配置的麻烦,解压即可使用。 Linux/Mac:ossftp-1.0.3-linux-mac.zip 由于Linux/Mac系统默认会安装Python2.7或Python2.6,所以安装包中不再包含可执行的python, 只包含了相关依赖库。 运行 首先解压之前下载的文件,然后根据环境情况选择不同的运行方式。 Windows: 双击运行start.vbs即可 Linux: 打开终端,运行$ bash start.sh Mac:双击start.command,或者在终端运行$ bash start.command 上述步骤会启动一个FTP server, 默认监听在127.0.0.1的2048端口。同时,为了方便您对FTP server的状态进行管控,还会启动一个web服务器,监听在127.0.0.1的8192端口。如果您的系统有图形界面,还会自动打开控制页面,如下所示: 说明 大部分情况不要任何配置,就可以运行一个FTP server了,如果想对FTP server进行配置, 请注意需要重启才能生效。 连接到FTP server 推荐使用FileZilla客户端去连接FTP server。下载安装后,按如下方式连接即可: 主机: 127.0.0.1 登录类型: 正常 用户:access_key_id/bucket_name 密码:access_key_secret 说明 用户中,/是必须的,如用户tSxyiUM3NKswPMEp/test-hz-jh-002。 access_key_id和access_key_secret的获取,请参见OSS访问控制。 高级使用 通过控制页面管理FTP server 修改监听地址 如果需要通过网络来访问FTP server, 那么需要修改监听地址,因为默认的监听地址127.0.0.1只允许来自本地的访问。可以修改成内网ip或公网ip。 修改监听端口 修改FTP server监听的端口, 建议端口大于1024, 因为监听1024以下的端口时需要管理员权限。 修改日志等级 设置FTP server的日志级别。FTP server的日志会输出到data/ossftp/目录下, 可以通过控制页面的日志按钮在线查看。默认的日志界别为INFO, 打印的日志信息较少,如果需要更详细的日志信息,可以修改为DEBUG模式。如果希望减少日志的输出,可以设置级别为WARNING或ERROR等。 设置Bucket endpoints FTP server默认会探索bucket的所属location信息,随后将请求发到对应的region(如oss-cn-hangzhou.aliyuncs.com或oss-cn-beijing.aliyuncs.com),FTP server会优先尝试内网访问oss。如果您设置了bucket endpoints, 如设置为test-bucket-a.oss-cn-hangzhou.aliyuncs.com, 那么当访问test-bucket-a时,就会使用oss-cn-hangzhou.aliyuncs.com域名。 设置显示语言 通过设置cn/en,可修改FTP控制页面的显示语言为中文/英文。 说明 所有修改都需要重启才能生效。 上述的所有修改其实都是修改的ftp根目录下的config.json, 所以您可以直接修改该文件。 直接启动FTP server(Linux/Mac) 可以直接启动ossftp目录下的ftpserver.py, 免去web_server的开销。 $ python ossftp/ftpserver.py &配置修改方式同上。 可能遇到的问题 如果连接FTP server时,遇到以下错误: 有两种可能: 输入的 access_key_id 和 access_key_secret有误。 解决:请输入正确的信息后再重试。 所用的access_key信息为ram 子账户的access_key,而子账户不具有List buckets权限。 解决:当使用子账户访问时,请在控制页面中指定bucket endpoints, 即告诉FTP server某个bucket应该用什么endpoint来访问。同时,子账户也需要一些必须的权限,关于使用ram访问oss时的访问控制,请参考文档访问控制。具体如下。 只读访问 OSS FTP工具需要的权限列表为 ListObjects、GetObject、HeadObject。关于如何创建一个具有只读访问的ram子账户,请参考图文教程如何结合ram实现文件共享。 上传文件 如果允许ram子账户上传文件,还需要PutObject。 删除文件 如果允许ram子账户删除文件,还需要DeleteObject。 如果您在Linux下运行FTP server,然后用FileZilla连接时遇到如下错误:501 can't decode path (server filesystem encoding is ANSI_X3.4-1968)一般是因为本地的中文编码有问题。在将要运行start.sh的终端中输入下面的命令,然后再重新启动即可。$ export LC_ALL=en_US.UTF-8; export LANG="en_US.UTF-8"; locale
2019-12-01 23:15:11 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 简介 OSS FTP工具是一个特殊FTP server, 它接收普通FTP请求后,将对文件、文件夹的操作映射为对OSS的操作,从而使得您可以基于FTP协议来管理存储在OSS上的文件。 说明 生产环境请使用oss sdk, OSS FTP工具主要面向个人用户使用。 主要特性 跨平台:无论是Windows、Linux还是Mac, 无论是32位还是64位操作系统,无论是图形界面还是命令行都可以运行。 免安装: 解压后可直接运行。 免设置:无需设置即可运行。 透明化: FTP工具是python写的,您可以看到完整的源码,我们稍后也会开源到Github。 主要功能 支持文件和文件夹的上传、下载、删除等操作。 通过Multipart方式,分片上传大文件。 支持大部分FTP指令,可以满足日常FTP的使用需求。 说明 目前在1.0版本中,考虑到安装部署的简便,OSS FTP工具没有支持TLS加密。由于FTP协议是明文传输的,为了防止您的密码泄漏,建议将FTP server和client运行在同一台机器上,通过127.0.0.1:port的方式来访问。 不支持rename和move操作。 安装包解压后的路径不要含有中文。 FTP server的管理控制页面在低版本的IE中可能打不开。 FTP server支持的Python版本:Python2.6和Python2.7。 下载 Windows:ossftp-1.0.3-win.zip 由于Windows不会默认安装Python2.7,所以安装包中包含了Python2.7,免去您python安装配置的麻烦,解压即可使用。 Linux/Mac:ossftp-1.0.3-linux-mac.zip 由于Linux/Mac系统默认会安装Python2.7或Python2.6,所以安装包中不再包含可执行的python, 只包含了相关依赖库。 运行 首先解压之前下载的文件,然后根据环境情况选择不同的运行方式。 Windows: 双击运行start.vbs即可 Linux: 打开终端,运行$ bash start.sh Mac:双击start.command,或者在终端运行$ bash start.command 上述步骤会启动一个FTP server, 默认监听在127.0.0.1的2048端口。同时,为了方便您对FTP server的状态进行管控,还会启动一个web服务器,监听在127.0.0.1的8192端口。如果您的系统有图形界面,还会自动打开控制页面,如下所示: 说明 大部分情况不要任何配置,就可以运行一个FTP server了,如果想对FTP server进行配置, 请注意需要重启才能生效。 连接到FTP server 推荐使用FileZilla客户端去连接FTP server。下载安装后,按如下方式连接即可: 主机: 127.0.0.1 登录类型: 正常 用户:access_key_id/bucket_name 密码:access_key_secret 说明 用户中,/是必须的,如用户tSxyiUM3NKswPMEp/test-hz-jh-002。 access_key_id和access_key_secret的获取,请参见OSS访问控制。 高级使用 通过控制页面管理FTP server 修改监听地址 如果需要通过网络来访问FTP server, 那么需要修改监听地址,因为默认的监听地址127.0.0.1只允许来自本地的访问。可以修改成内网ip或公网ip。 修改监听端口 修改FTP server监听的端口, 建议端口大于1024, 因为监听1024以下的端口时需要管理员权限。 修改日志等级 设置FTP server的日志级别。FTP server的日志会输出到data/ossftp/目录下, 可以通过控制页面的日志按钮在线查看。默认的日志界别为INFO, 打印的日志信息较少,如果需要更详细的日志信息,可以修改为DEBUG模式。如果希望减少日志的输出,可以设置级别为WARNING或ERROR等。 设置Bucket endpoints FTP server默认会探索bucket的所属location信息,随后将请求发到对应的region(如oss-cn-hangzhou.aliyuncs.com或oss-cn-beijing.aliyuncs.com),FTP server会优先尝试内网访问oss。如果您设置了bucket endpoints, 如设置为test-bucket-a.oss-cn-hangzhou.aliyuncs.com, 那么当访问test-bucket-a时,就会使用oss-cn-hangzhou.aliyuncs.com域名。 设置显示语言 通过设置cn/en,可修改FTP控制页面的显示语言为中文/英文。 说明 所有修改都需要重启才能生效。 上述的所有修改其实都是修改的ftp根目录下的config.json, 所以您可以直接修改该文件。 直接启动FTP server(Linux/Mac) 可以直接启动ossftp目录下的ftpserver.py, 免去web_server的开销。 $ python ossftp/ftpserver.py &配置修改方式同上。 可能遇到的问题 如果连接FTP server时,遇到以下错误: 有两种可能: 输入的 access_key_id 和 access_key_secret有误。 解决:请输入正确的信息后再重试。 所用的access_key信息为ram 子账户的access_key,而子账户不具有List buckets权限。 解决:当使用子账户访问时,请在控制页面中指定bucket endpoints, 即告诉FTP server某个bucket应该用什么endpoint来访问。同时,子账户也需要一些必须的权限,关于使用ram访问oss时的访问控制,请参考文档访问控制。具体如下。 只读访问 OSS FTP工具需要的权限列表为 ListObjects、GetObject、HeadObject。关于如何创建一个具有只读访问的ram子账户,请参考图文教程如何结合ram实现文件共享。 上传文件 如果允许ram子账户上传文件,还需要PutObject。 删除文件 如果允许ram子账户删除文件,还需要DeleteObject。 如果您在Linux下运行FTP server,然后用FileZilla连接时遇到如下错误:501 can't decode path (server filesystem encoding is ANSI_X3.4-1968)一般是因为本地的中文编码有问题。在将要运行start.sh的终端中输入下面的命令,然后再重新启动即可。$ export LC_ALL=en_US.UTF-8; export LANG="en_US.UTF-8"; locale
2019-12-01 23:15:11 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 简介 OSS FTP工具是一个特殊FTP server, 它接收普通FTP请求后,将对文件、文件夹的操作映射为对OSS的操作,从而使得您可以基于FTP协议来管理存储在OSS上的文件。 说明 生产环境请使用oss sdk, OSS FTP工具主要面向个人用户使用。 主要特性 跨平台:无论是Windows、Linux还是Mac, 无论是32位还是64位操作系统,无论是图形界面还是命令行都可以运行。 免安装: 解压后可直接运行。 免设置:无需设置即可运行。 透明化: FTP工具是python写的,您可以看到完整的源码,我们稍后也会开源到Github。 主要功能 支持文件和文件夹的上传、下载、删除等操作。 通过Multipart方式,分片上传大文件。 支持大部分FTP指令,可以满足日常FTP的使用需求。 说明 目前在1.0版本中,考虑到安装部署的简便,OSS FTP工具没有支持TLS加密。由于FTP协议是明文传输的,为了防止您的密码泄漏,建议将FTP server和client运行在同一台机器上,通过127.0.0.1:port的方式来访问。 不支持rename和move操作。 安装包解压后的路径不要含有中文。 FTP server的管理控制页面在低版本的IE中可能打不开。 FTP server支持的Python版本:Python2.6和Python2.7。 下载 Windows:ossftp-1.0.3-win.zip 由于Windows不会默认安装Python2.7,所以安装包中包含了Python2.7,免去您python安装配置的麻烦,解压即可使用。 Linux/Mac:ossftp-1.0.3-linux-mac.zip 由于Linux/Mac系统默认会安装Python2.7或Python2.6,所以安装包中不再包含可执行的python, 只包含了相关依赖库。 运行 首先解压之前下载的文件,然后根据环境情况选择不同的运行方式。 Windows: 双击运行start.vbs即可 Linux: 打开终端,运行$ bash start.sh Mac:双击start.command,或者在终端运行$ bash start.command 上述步骤会启动一个FTP server, 默认监听在127.0.0.1的2048端口。同时,为了方便您对FTP server的状态进行管控,还会启动一个web服务器,监听在127.0.0.1的8192端口。如果您的系统有图形界面,还会自动打开控制页面,如下所示: 说明 大部分情况不要任何配置,就可以运行一个FTP server了,如果想对FTP server进行配置, 请注意需要重启才能生效。 连接到FTP server 推荐使用FileZilla客户端去连接FTP server。下载安装后,按如下方式连接即可: 主机: 127.0.0.1 登录类型: 正常 用户:access_key_id/bucket_name 密码:access_key_secret 说明 用户中,/是必须的,如用户tSxyiUM3NKswPMEp/test-hz-jh-002。 access_key_id和access_key_secret的获取,请参见OSS访问控制。 高级使用 通过控制页面管理FTP server 修改监听地址 如果需要通过网络来访问FTP server, 那么需要修改监听地址,因为默认的监听地址127.0.0.1只允许来自本地的访问。可以修改成内网ip或公网ip。 修改监听端口 修改FTP server监听的端口, 建议端口大于1024, 因为监听1024以下的端口时需要管理员权限。 修改日志等级 设置FTP server的日志级别。FTP server的日志会输出到data/ossftp/目录下, 可以通过控制页面的日志按钮在线查看。默认的日志界别为INFO, 打印的日志信息较少,如果需要更详细的日志信息,可以修改为DEBUG模式。如果希望减少日志的输出,可以设置级别为WARNING或ERROR等。 设置Bucket endpoints FTP server默认会探索bucket的所属location信息,随后将请求发到对应的region(如oss-cn-hangzhou.aliyuncs.com或oss-cn-beijing.aliyuncs.com),FTP server会优先尝试内网访问oss。如果您设置了bucket endpoints, 如设置为test-bucket-a.oss-cn-hangzhou.aliyuncs.com, 那么当访问test-bucket-a时,就会使用oss-cn-hangzhou.aliyuncs.com域名。 设置显示语言 通过设置cn/en,可修改FTP控制页面的显示语言为中文/英文。 说明 所有修改都需要重启才能生效。 上述的所有修改其实都是修改的ftp根目录下的config.json, 所以您可以直接修改该文件。 直接启动FTP server(Linux/Mac) 可以直接启动ossftp目录下的ftpserver.py, 免去web_server的开销。 $ python ossftp/ftpserver.py &配置修改方式同上。 可能遇到的问题 如果连接FTP server时,遇到以下错误: 有两种可能: 输入的 access_key_id 和 access_key_secret有误。 解决:请输入正确的信息后再重试。 所用的access_key信息为ram 子账户的access_key,而子账户不具有List buckets权限。 解决:当使用子账户访问时,请在控制页面中指定bucket endpoints, 即告诉FTP server某个bucket应该用什么endpoint来访问。同时,子账户也需要一些必须的权限,关于使用ram访问oss时的访问控制,请参考文档访问控制。具体如下。 只读访问 OSS FTP工具需要的权限列表为 ListObjects、GetObject、HeadObject。关于如何创建一个具有只读访问的ram子账户,请参考图文教程如何结合ram实现文件共享。 上传文件 如果允许ram子账户上传文件,还需要PutObject。 删除文件 如果允许ram子账户删除文件,还需要DeleteObject。 如果您在Linux下运行FTP server,然后用FileZilla连接时遇到如下错误:501 can't decode path (server filesystem encoding is ANSI_X3.4-1968)一般是因为本地的中文编码有问题。在将要运行start.sh的终端中输入下面的命令,然后再重新启动即可。$ export LC_ALL=en_US.UTF-8; export LANG="en_US.UTF-8"; locale
2019-12-01 23:15:11 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 简介 OSS FTP工具是一个特殊FTP server, 它接收普通FTP请求后,将对文件、文件夹的操作映射为对OSS的操作,从而使得您可以基于FTP协议来管理存储在OSS上的文件。 说明 生产环境请使用oss sdk, OSS FTP工具主要面向个人用户使用。 主要特性 跨平台:无论是Windows、Linux还是Mac, 无论是32位还是64位操作系统,无论是图形界面还是命令行都可以运行。 免安装: 解压后可直接运行。 免设置:无需设置即可运行。 透明化: FTP工具是python写的,您可以看到完整的源码,我们稍后也会开源到Github。 主要功能 支持文件和文件夹的上传、下载、删除等操作。 通过Multipart方式,分片上传大文件。 支持大部分FTP指令,可以满足日常FTP的使用需求。 说明 目前在1.0版本中,考虑到安装部署的简便,OSS FTP工具没有支持TLS加密。由于FTP协议是明文传输的,为了防止您的密码泄漏,建议将FTP server和client运行在同一台机器上,通过127.0.0.1:port的方式来访问。 不支持rename和move操作。 安装包解压后的路径不要含有中文。 FTP server的管理控制页面在低版本的IE中可能打不开。 FTP server支持的Python版本:Python2.6和Python2.7。 下载 Windows:ossftp-1.0.3-win.zip 由于Windows不会默认安装Python2.7,所以安装包中包含了Python2.7,免去您python安装配置的麻烦,解压即可使用。 Linux/Mac:ossftp-1.0.3-linux-mac.zip 由于Linux/Mac系统默认会安装Python2.7或Python2.6,所以安装包中不再包含可执行的python, 只包含了相关依赖库。 运行 首先解压之前下载的文件,然后根据环境情况选择不同的运行方式。 Windows: 双击运行start.vbs即可 Linux: 打开终端,运行$ bash start.sh Mac:双击start.command,或者在终端运行$ bash start.command 上述步骤会启动一个FTP server, 默认监听在127.0.0.1的2048端口。同时,为了方便您对FTP server的状态进行管控,还会启动一个web服务器,监听在127.0.0.1的8192端口。如果您的系统有图形界面,还会自动打开控制页面,如下所示: 说明 大部分情况不要任何配置,就可以运行一个FTP server了,如果想对FTP server进行配置, 请注意需要重启才能生效。 连接到FTP server 推荐使用FileZilla客户端去连接FTP server。下载安装后,按如下方式连接即可: 主机: 127.0.0.1 登录类型: 正常 用户:access_key_id/bucket_name 密码:access_key_secret 说明 用户中,/是必须的,如用户tSxyiUM3NKswPMEp/test-hz-jh-002。 access_key_id和access_key_secret的获取,请参见OSS访问控制。 高级使用 通过控制页面管理FTP server 修改监听地址 如果需要通过网络来访问FTP server, 那么需要修改监听地址,因为默认的监听地址127.0.0.1只允许来自本地的访问。可以修改成内网ip或公网ip。 修改监听端口 修改FTP server监听的端口, 建议端口大于1024, 因为监听1024以下的端口时需要管理员权限。 修改日志等级 设置FTP server的日志级别。FTP server的日志会输出到data/ossftp/目录下, 可以通过控制页面的日志按钮在线查看。默认的日志界别为INFO, 打印的日志信息较少,如果需要更详细的日志信息,可以修改为DEBUG模式。如果希望减少日志的输出,可以设置级别为WARNING或ERROR等。 设置Bucket endpoints FTP server默认会探索bucket的所属location信息,随后将请求发到对应的region(如oss-cn-hangzhou.aliyuncs.com或oss-cn-beijing.aliyuncs.com),FTP server会优先尝试内网访问oss。如果您设置了bucket endpoints, 如设置为test-bucket-a.oss-cn-hangzhou.aliyuncs.com, 那么当访问test-bucket-a时,就会使用oss-cn-hangzhou.aliyuncs.com域名。 设置显示语言 通过设置cn/en,可修改FTP控制页面的显示语言为中文/英文。 说明 所有修改都需要重启才能生效。 上述的所有修改其实都是修改的ftp根目录下的config.json, 所以您可以直接修改该文件。 直接启动FTP server(Linux/Mac) 可以直接启动ossftp目录下的ftpserver.py, 免去web_server的开销。 $ python ossftp/ftpserver.py &配置修改方式同上。 可能遇到的问题 如果连接FTP server时,遇到以下错误: 有两种可能: 输入的 access_key_id 和 access_key_secret有误。 解决:请输入正确的信息后再重试。 所用的access_key信息为ram 子账户的access_key,而子账户不具有List buckets权限。 解决:当使用子账户访问时,请在控制页面中指定bucket endpoints, 即告诉FTP server某个bucket应该用什么endpoint来访问。同时,子账户也需要一些必须的权限,关于使用ram访问oss时的访问控制,请参考文档访问控制。具体如下。 只读访问 OSS FTP工具需要的权限列表为 ListObjects、GetObject、HeadObject。关于如何创建一个具有只读访问的ram子账户,请参考图文教程如何结合ram实现文件共享。 上传文件 如果允许ram子账户上传文件,还需要PutObject。 删除文件 如果允许ram子账户删除文件,还需要DeleteObject。 如果您在Linux下运行FTP server,然后用FileZilla连接时遇到如下错误:501 can't decode path (server filesystem encoding is ANSI_X3.4-1968)一般是因为本地的中文编码有问题。在将要运行start.sh的终端中输入下面的命令,然后再重新启动即可。$ export LC_ALL=en_US.UTF-8; export LANG="en_US.UTF-8"; locale
2019-12-01 23:15:11 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 简介 OSS FTP工具是一个特殊FTP server, 它接收普通FTP请求后,将对文件、文件夹的操作映射为对OSS的操作,从而使得您可以基于FTP协议来管理存储在OSS上的文件。 说明 生产环境请使用oss sdk, OSS FTP工具主要面向个人用户使用。 主要特性 跨平台:无论是Windows、Linux还是Mac, 无论是32位还是64位操作系统,无论是图形界面还是命令行都可以运行。 免安装: 解压后可直接运行。 免设置:无需设置即可运行。 透明化: FTP工具是python写的,您可以看到完整的源码,我们稍后也会开源到Github。 主要功能 支持文件和文件夹的上传、下载、删除等操作。 通过Multipart方式,分片上传大文件。 支持大部分FTP指令,可以满足日常FTP的使用需求。 说明 目前在1.0版本中,考虑到安装部署的简便,OSS FTP工具没有支持TLS加密。由于FTP协议是明文传输的,为了防止您的密码泄漏,建议将FTP server和client运行在同一台机器上,通过127.0.0.1:port的方式来访问。 不支持rename和move操作。 安装包解压后的路径不要含有中文。 FTP server的管理控制页面在低版本的IE中可能打不开。 FTP server支持的Python版本:Python2.6和Python2.7。 下载 Windows:ossftp-1.0.3-win.zip 由于Windows不会默认安装Python2.7,所以安装包中包含了Python2.7,免去您python安装配置的麻烦,解压即可使用。 Linux/Mac:ossftp-1.0.3-linux-mac.zip 由于Linux/Mac系统默认会安装Python2.7或Python2.6,所以安装包中不再包含可执行的python, 只包含了相关依赖库。 运行 首先解压之前下载的文件,然后根据环境情况选择不同的运行方式。 Windows: 双击运行start.vbs即可 Linux: 打开终端,运行$ bash start.sh Mac:双击start.command,或者在终端运行$ bash start.command 上述步骤会启动一个FTP server, 默认监听在127.0.0.1的2048端口。同时,为了方便您对FTP server的状态进行管控,还会启动一个web服务器,监听在127.0.0.1的8192端口。如果您的系统有图形界面,还会自动打开控制页面,如下所示: 说明 大部分情况不要任何配置,就可以运行一个FTP server了,如果想对FTP server进行配置, 请注意需要重启才能生效。 连接到FTP server 推荐使用FileZilla客户端去连接FTP server。下载安装后,按如下方式连接即可: 主机: 127.0.0.1 登录类型: 正常 用户:access_key_id/bucket_name 密码:access_key_secret 说明 用户中,/是必须的,如用户tSxyiUM3NKswPMEp/test-hz-jh-002。 access_key_id和access_key_secret的获取,请参见OSS访问控制。 高级使用 通过控制页面管理FTP server 修改监听地址 如果需要通过网络来访问FTP server, 那么需要修改监听地址,因为默认的监听地址127.0.0.1只允许来自本地的访问。可以修改成内网ip或公网ip。 修改监听端口 修改FTP server监听的端口, 建议端口大于1024, 因为监听1024以下的端口时需要管理员权限。 修改日志等级 设置FTP server的日志级别。FTP server的日志会输出到data/ossftp/目录下, 可以通过控制页面的日志按钮在线查看。默认的日志界别为INFO, 打印的日志信息较少,如果需要更详细的日志信息,可以修改为DEBUG模式。如果希望减少日志的输出,可以设置级别为WARNING或ERROR等。 设置Bucket endpoints FTP server默认会探索bucket的所属location信息,随后将请求发到对应的region(如oss-cn-hangzhou.aliyuncs.com或oss-cn-beijing.aliyuncs.com),FTP server会优先尝试内网访问oss。如果您设置了bucket endpoints, 如设置为test-bucket-a.oss-cn-hangzhou.aliyuncs.com, 那么当访问test-bucket-a时,就会使用oss-cn-hangzhou.aliyuncs.com域名。 设置显示语言 通过设置cn/en,可修改FTP控制页面的显示语言为中文/英文。 说明 所有修改都需要重启才能生效。 上述的所有修改其实都是修改的ftp根目录下的config.json, 所以您可以直接修改该文件。 直接启动FTP server(Linux/Mac) 可以直接启动ossftp目录下的ftpserver.py, 免去web_server的开销。 $ python ossftp/ftpserver.py &配置修改方式同上。 可能遇到的问题 如果连接FTP server时,遇到以下错误: 有两种可能: 输入的 access_key_id 和 access_key_secret有误。 解决:请输入正确的信息后再重试。 所用的access_key信息为ram 子账户的access_key,而子账户不具有List buckets权限。 解决:当使用子账户访问时,请在控制页面中指定bucket endpoints, 即告诉FTP server某个bucket应该用什么endpoint来访问。同时,子账户也需要一些必须的权限,关于使用ram访问oss时的访问控制,请参考文档访问控制。具体如下。 只读访问 OSS FTP工具需要的权限列表为 ListObjects、GetObject、HeadObject。关于如何创建一个具有只读访问的ram子账户,请参考图文教程如何结合ram实现文件共享。 上传文件 如果允许ram子账户上传文件,还需要PutObject。 删除文件 如果允许ram子账户删除文件,还需要DeleteObject。 如果您在Linux下运行FTP server,然后用FileZilla连接时遇到如下错误:501 can't decode path (server filesystem encoding is ANSI_X3.4-1968)一般是因为本地的中文编码有问题。在将要运行start.sh的终端中输入下面的命令,然后再重新启动即可。$ export LC_ALL=en_US.UTF-8; export LANG="en_US.UTF-8"; locale
2019-12-01 23:15:12 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 简介 OSS FTP工具是一个特殊FTP server, 它接收普通FTP请求后,将对文件、文件夹的操作映射为对OSS的操作,从而使得您可以基于FTP协议来管理存储在OSS上的文件。 说明 生产环境请使用oss sdk, OSS FTP工具主要面向个人用户使用。 主要特性 跨平台:无论是Windows、Linux还是Mac, 无论是32位还是64位操作系统,无论是图形界面还是命令行都可以运行。 免安装: 解压后可直接运行。 免设置:无需设置即可运行。 透明化: FTP工具是python写的,您可以看到完整的源码,我们稍后也会开源到Github。 主要功能 支持文件和文件夹的上传、下载、删除等操作。 通过Multipart方式,分片上传大文件。 支持大部分FTP指令,可以满足日常FTP的使用需求。 说明 目前在1.0版本中,考虑到安装部署的简便,OSS FTP工具没有支持TLS加密。由于FTP协议是明文传输的,为了防止您的密码泄漏,建议将FTP server和client运行在同一台机器上,通过127.0.0.1:port的方式来访问。 不支持rename和move操作。 安装包解压后的路径不要含有中文。 FTP server的管理控制页面在低版本的IE中可能打不开。 FTP server支持的Python版本:Python2.6和Python2.7。 下载 Windows:ossftp-1.0.3-win.zip 由于Windows不会默认安装Python2.7,所以安装包中包含了Python2.7,免去您python安装配置的麻烦,解压即可使用。 Linux/Mac:ossftp-1.0.3-linux-mac.zip 由于Linux/Mac系统默认会安装Python2.7或Python2.6,所以安装包中不再包含可执行的python, 只包含了相关依赖库。 运行 首先解压之前下载的文件,然后根据环境情况选择不同的运行方式。 Windows: 双击运行start.vbs即可 Linux: 打开终端,运行$ bash start.sh Mac:双击start.command,或者在终端运行$ bash start.command 上述步骤会启动一个FTP server, 默认监听在127.0.0.1的2048端口。同时,为了方便您对FTP server的状态进行管控,还会启动一个web服务器,监听在127.0.0.1的8192端口。如果您的系统有图形界面,还会自动打开控制页面,如下所示: 说明 大部分情况不要任何配置,就可以运行一个FTP server了,如果想对FTP server进行配置, 请注意需要重启才能生效。 连接到FTP server 推荐使用FileZilla客户端去连接FTP server。下载安装后,按如下方式连接即可: 主机: 127.0.0.1 登录类型: 正常 用户:access_key_id/bucket_name 密码:access_key_secret 说明 用户中,/是必须的,如用户tSxyiUM3NKswPMEp/test-hz-jh-002。 access_key_id和access_key_secret的获取,请参见OSS访问控制。 高级使用 通过控制页面管理FTP server 修改监听地址 如果需要通过网络来访问FTP server, 那么需要修改监听地址,因为默认的监听地址127.0.0.1只允许来自本地的访问。可以修改成内网ip或公网ip。 修改监听端口 修改FTP server监听的端口, 建议端口大于1024, 因为监听1024以下的端口时需要管理员权限。 修改日志等级 设置FTP server的日志级别。FTP server的日志会输出到data/ossftp/目录下, 可以通过控制页面的日志按钮在线查看。默认的日志界别为INFO, 打印的日志信息较少,如果需要更详细的日志信息,可以修改为DEBUG模式。如果希望减少日志的输出,可以设置级别为WARNING或ERROR等。 设置Bucket endpoints FTP server默认会探索bucket的所属location信息,随后将请求发到对应的region(如oss-cn-hangzhou.aliyuncs.com或oss-cn-beijing.aliyuncs.com),FTP server会优先尝试内网访问oss。如果您设置了bucket endpoints, 如设置为test-bucket-a.oss-cn-hangzhou.aliyuncs.com, 那么当访问test-bucket-a时,就会使用oss-cn-hangzhou.aliyuncs.com域名。 设置显示语言 通过设置cn/en,可修改FTP控制页面的显示语言为中文/英文。 说明 所有修改都需要重启才能生效。 上述的所有修改其实都是修改的ftp根目录下的config.json, 所以您可以直接修改该文件。 直接启动FTP server(Linux/Mac) 可以直接启动ossftp目录下的ftpserver.py, 免去web_server的开销。 $ python ossftp/ftpserver.py &配置修改方式同上。 可能遇到的问题 如果连接FTP server时,遇到以下错误: 有两种可能: 输入的 access_key_id 和 access_key_secret有误。 解决:请输入正确的信息后再重试。 所用的access_key信息为ram 子账户的access_key,而子账户不具有List buckets权限。 解决:当使用子账户访问时,请在控制页面中指定bucket endpoints, 即告诉FTP server某个bucket应该用什么endpoint来访问。同时,子账户也需要一些必须的权限,关于使用ram访问oss时的访问控制,请参考文档访问控制。具体如下。 只读访问 OSS FTP工具需要的权限列表为 ListObjects、GetObject、HeadObject。关于如何创建一个具有只读访问的ram子账户,请参考图文教程如何结合ram实现文件共享。 上传文件 如果允许ram子账户上传文件,还需要PutObject。 删除文件 如果允许ram子账户删除文件,还需要DeleteObject。 如果您在Linux下运行FTP server,然后用FileZilla连接时遇到如下错误:501 can't decode path (server filesystem encoding is ANSI_X3.4-1968)一般是因为本地的中文编码有问题。在将要运行start.sh的终端中输入下面的命令,然后再重新启动即可。$ export LC_ALL=en_US.UTF-8; export LANG="en_US.UTF-8"; locale
2019-12-01 23:15:12 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 简介 OSS FTP工具是一个特殊FTP server, 它接收普通FTP请求后,将对文件、文件夹的操作映射为对OSS的操作,从而使得您可以基于FTP协议来管理存储在OSS上的文件。 说明 生产环境请使用oss sdk, OSS FTP工具主要面向个人用户使用。 主要特性 跨平台:无论是Windows、Linux还是Mac, 无论是32位还是64位操作系统,无论是图形界面还是命令行都可以运行。 免安装: 解压后可直接运行。 免设置:无需设置即可运行。 透明化: FTP工具是python写的,您可以看到完整的源码,我们稍后也会开源到Github。 主要功能 支持文件和文件夹的上传、下载、删除等操作。 通过Multipart方式,分片上传大文件。 支持大部分FTP指令,可以满足日常FTP的使用需求。 说明 目前在1.0版本中,考虑到安装部署的简便,OSS FTP工具没有支持TLS加密。由于FTP协议是明文传输的,为了防止您的密码泄漏,建议将FTP server和client运行在同一台机器上,通过127.0.0.1:port的方式来访问。 不支持rename和move操作。 安装包解压后的路径不要含有中文。 FTP server的管理控制页面在低版本的IE中可能打不开。 FTP server支持的Python版本:Python2.6和Python2.7。 下载 Windows:ossftp-1.0.3-win.zip 由于Windows不会默认安装Python2.7,所以安装包中包含了Python2.7,免去您python安装配置的麻烦,解压即可使用。 Linux/Mac:ossftp-1.0.3-linux-mac.zip 由于Linux/Mac系统默认会安装Python2.7或Python2.6,所以安装包中不再包含可执行的python, 只包含了相关依赖库。 运行 首先解压之前下载的文件,然后根据环境情况选择不同的运行方式。 Windows: 双击运行start.vbs即可 Linux: 打开终端,运行$ bash start.sh Mac:双击start.command,或者在终端运行$ bash start.command 上述步骤会启动一个FTP server, 默认监听在127.0.0.1的2048端口。同时,为了方便您对FTP server的状态进行管控,还会启动一个web服务器,监听在127.0.0.1的8192端口。如果您的系统有图形界面,还会自动打开控制页面,如下所示: 说明 大部分情况不要任何配置,就可以运行一个FTP server了,如果想对FTP server进行配置, 请注意需要重启才能生效。 连接到FTP server 推荐使用FileZilla客户端去连接FTP server。下载安装后,按如下方式连接即可: 主机: 127.0.0.1 登录类型: 正常 用户:access_key_id/bucket_name 密码:access_key_secret 说明 用户中,/是必须的,如用户tSxyiUM3NKswPMEp/test-hz-jh-002。 access_key_id和access_key_secret的获取,请参见OSS访问控制。 高级使用 通过控制页面管理FTP server 修改监听地址 如果需要通过网络来访问FTP server, 那么需要修改监听地址,因为默认的监听地址127.0.0.1只允许来自本地的访问。可以修改成内网ip或公网ip。 修改监听端口 修改FTP server监听的端口, 建议端口大于1024, 因为监听1024以下的端口时需要管理员权限。 修改日志等级 设置FTP server的日志级别。FTP server的日志会输出到data/ossftp/目录下, 可以通过控制页面的日志按钮在线查看。默认的日志界别为INFO, 打印的日志信息较少,如果需要更详细的日志信息,可以修改为DEBUG模式。如果希望减少日志的输出,可以设置级别为WARNING或ERROR等。 设置Bucket endpoints FTP server默认会探索bucket的所属location信息,随后将请求发到对应的region(如oss-cn-hangzhou.aliyuncs.com或oss-cn-beijing.aliyuncs.com),FTP server会优先尝试内网访问oss。如果您设置了bucket endpoints, 如设置为test-bucket-a.oss-cn-hangzhou.aliyuncs.com, 那么当访问test-bucket-a时,就会使用oss-cn-hangzhou.aliyuncs.com域名。 设置显示语言 通过设置cn/en,可修改FTP控制页面的显示语言为中文/英文。 说明 所有修改都需要重启才能生效。 上述的所有修改其实都是修改的ftp根目录下的config.json, 所以您可以直接修改该文件。 直接启动FTP server(Linux/Mac) 可以直接启动ossftp目录下的ftpserver.py, 免去web_server的开销。 $ python ossftp/ftpserver.py &配置修改方式同上。 可能遇到的问题 如果连接FTP server时,遇到以下错误: 有两种可能: 输入的 access_key_id 和 access_key_secret有误。 解决:请输入正确的信息后再重试。 所用的access_key信息为ram 子账户的access_key,而子账户不具有List buckets权限。 解决:当使用子账户访问时,请在控制页面中指定bucket endpoints, 即告诉FTP server某个bucket应该用什么endpoint来访问。同时,子账户也需要一些必须的权限,关于使用ram访问oss时的访问控制,请参考文档访问控制。具体如下。 只读访问 OSS FTP工具需要的权限列表为 ListObjects、GetObject、HeadObject。关于如何创建一个具有只读访问的ram子账户,请参考图文教程如何结合ram实现文件共享。 上传文件 如果允许ram子账户上传文件,还需要PutObject。 删除文件 如果允许ram子账户删除文件,还需要DeleteObject。 如果您在Linux下运行FTP server,然后用FileZilla连接时遇到如下错误:501 can't decode path (server filesystem encoding is ANSI_X3.4-1968)一般是因为本地的中文编码有问题。在将要运行start.sh的终端中输入下面的命令,然后再重新启动即可。$ export LC_ALL=en_US.UTF-8; export LANG="en_US.UTF-8"; locale
2019-12-01 23:15:13 0 浏览量 回答数 0

问题

Keras(TensorFlow,CPU):在循环中训练顺序模型会消耗内存

我试图循环训练1000倍的顺序模型。在每个循环中,我的程序都会泄漏内存,直到用尽并收到OOM异常。 之前我已经问过类似的问题(连续训练多个顺序模型会减慢速度) 并看到其他人也遇到类...
祖安文状元 2020-02-23 16:17:29 136 浏览量 回答数 3

问题

ossftp-快速安装

如何快速安装使用OSS FTP工具 简介 OSS FTP工具是一个特殊FTP server, 它接收普通FTP请求后,将对文件、文件夹的操作映射为对OSS的操作,从而使得您可以基于FTP协议来管理存储...
青衫无名 2019-12-01 21:59:02 2356 浏览量 回答数 1

问题

OSS FTP工具发布啦

OSS FTP工具发布啦! 如果您正望着各种繁杂的安装部署命令一脸茫然, 如果您正纠结于其他工具上传时的文件大小限制, 如果您想双击鼠标就完成文件的上传和下载, 如果您有通过FTP协议使用OSS...
oss-dev 2019-12-01 22:09:23 54337 浏览量 回答数 41

回答

内存泄漏源于Keras和TensorFlow,它们使用单​​个“默认图”存储网络结构,网络结构的大小随内部for循环的每次迭代而增加。 调用会K.clear_session()在迭代之间释放与默认图相关联的某些(后端)状态,但是需要额外的调用tf.reset_default_graph()才能清除Python状态。 请注意,可能有一个更有效的解决方案:由于nn不依赖于任何一个循环变量,因此可以在循环外部定义它,并在循环内部重用相同的实例。如果这样做,则无需清除会话或重置默认图,并且性能会提高,因为您可以受益于两次迭代之间的缓存。
祖安文状元 2020-02-23 16:17:34 0 浏览量 回答数 0

问题

点播和播放器下载需要的参数的区别

阿里云视频点播总是会出现VideoId、AccessKeyId、AccessKeySecret、playKey、playauth这几个值,这些值到底是什么?为什么会需要这些值?这些值到底从哪里拿到&...
樰篱 2019-12-01 21:04:15 2751 浏览量 回答数 1

回答

OOM全称Out of Memory. 常见于带有运行时环境的编程语言(Kotlin, Java,Python,Ruby等有虚拟机容器的语言)中,用于提示开发者内存超出最大限制。作为应用开发人员,解决OOM主要是对自己的应用内存使用情况,特别是出现内存泄漏等场景时进行内存占用情况分析, 借助分析的数据有针对性的进行内存优化。针对Android SDK层(Java层)的内存,可以使用Android Studio 中的MAT工具进行分析,一般建议的关注点是: Bitmap使用情况,大数据集合的缓存使用;针对 Android NDK层的内存(这块实际不受OOM的控制),一般需要使用具有root权限的工具,借用libc中的debug malloc工具,分析C层中的内存分配与使用情况。常见的内存优化方案有: 使用WeakReference替代强引用,特别是图片类的资源;用资源(线程、下载、图片)池替代随意资源分配。针对Android系统开发人员,将面对的是系统OOM与Low Memory Killer的相关问题,这是就涉及到调节系统LMK的参数,APP虚拟机运行参数,定时清理后台常驻进程等系统方案,一般是目前市面上的手机安全管家做的事情。
itxiaowang 2019-12-02 00:55:59 0 浏览量 回答数 0

问题

PYTHON

AXN绑定接口(Axnbind) 步骤 1 创建阿里云账号 为了访问AXN隐私号服务,您需要有一个阿里云账号。如果没有,可首先按照如下步骤创建阿里云账号: 访问阿里云 官方网站ÿ...
猫饭先生 2019-12-01 21:00:40 906 浏览量 回答数 0

问题

OSS FTP工具发布啦

OSS FTP工具发布啦! 如果您正望着各种繁杂的安装部署命令一脸茫然, 如果您正纠结于其他工具上传时的文件大小限制, 如果您想双击鼠标就完成文件的上传和下载, 如果您有通过FTP协议使用OSS...
oss-dev 2019-12-01 20:54:45 9860 浏览量 回答数 3

问题

流量充值API(Charge)---Python

流量直冲接口(Charge) 步骤 1 创建阿里云账号 为了访问语音服务,您需要有一个阿里云账号。如果没有,可首先按照如下步骤创建阿里云账号: 访问阿里云 官方网站,单击页...
猫饭先生 2019-12-01 20:59:36 1063 浏览量 回答数 0

问题

立足GitHub学编程:13个不容错过的Java项目

GitHub可谓一座程序开发的大宝库,有些素材值得fork,有些则能帮助我们改进自有代码或者学习编程技能。无论如何,开发工作当中我们几乎不可能绕得开GitHub。 下面,我们将一同分...
技术小菜鸟 2019-12-01 21:48:13 2674 浏览量 回答数 1

问题

如何实现通过客户端加密保护数据?

客户端加密是指用户数据在发送给远端服务器之前就完成加密,而加密所用的密钥的明文只保留在本地,从而可以保证用户数据安全,即使数据泄漏别人也无法解密得到原始数据。 本文介绍如何基于OSS的现有Pytho...
青衫无名 2019-12-01 21:39:10 1210 浏览量 回答数 0

问题

PYTHON 如何解绑接口

解绑接口(UnbindSubscription) 步骤 1 创建阿里云账号 为了访问AXN隐私号、AXB中间号服务,您需要有一个阿里云账号。如果没有,可首先按照如下步骤创建阿里云账号: ...
猫饭先生 2019-12-01 21:00:42 1167 浏览量 回答数 0

回答

配置你的 csh/tcsh 选择 csh/tcsh 和许多刚从 Linux 转到 BSD 的人不同,我并没有装完 BSD 就顺手安装 bash,因为之前除了打命令,我没有用到额外的功能,bash 也好,csh 也罢,在我眼里都是当做 shell 来用。但是渐渐地,我发现 csh 真的挺好用,它小巧、简单、开放,不需要额外依赖。可能有人要拿脚本能力来作对比,比如bash脚本支持函数,csh不支持等。对我来说,其实我从未像模像样地写过一个脚本,我的工作是 C++ 程序员。从我的角度来看,论脚本能力,其实bash、csh、zsh都比不上Python,论兼容性,bash、csh、zsh都比不上sh,论强大,bash、csh、zsh都比不上C/C++,甚至asm。再看易学程度,bash、csh、zsh可能还是要输给Python。综上,脚本能力忽略不计。:-x好了,说了这么多大不敬的话,我们开始切入正题。8-) 配置文件 全局配置文件 /etc/csh.cshrc个人配置文件 ~/.cshrc或~/.tcshrc为了方便,建议修改全局性的配置文件,这样每个账号都可以享受便利。按键绑定 通常,我们不设置按键绑定也能很好地工作,但是对于远程登录,可能需要一些额外的配置。比如,为了避免putty登录后,Home、End、Delete等变成~,你需要如下配置: bindkey '\e[1~' beginning-of-line # Home bindkey '\e[3~' delete-char # Delete bindkey '\e[4~' end-of-line # End bindkey "^W" backward-delete-word # Delete bindkey -k up history-search-backward # PageUp bindkey -k down history-search-forward # PageDown 提示符 设置一个漂亮使用的的提示符可以让工作变得更愉快高效。 以下是一个合理的配置方案: if ( $?prompt ) then #如果$prompt变量尚未设置,则做如下设置 if ( "$uid" == "0" ) then #判断用户的uid set prompt = "%U%n%u@%m [%l] %B%~%b # " #对于root,我们显示“#”号 else set prompt = "%U%n%u@%m [%l] %B%~%b % " #对于普通用户,显示“%”号。 endif endif Konsole中的效果如下: prompt2_img 一种彩色的配置方案如下: set cr = "%{\e[31m%}" #开始红色 set cg = "%{\e[32m%}" #开始绿色 set c0 = "%{\e[0m%}" #恢复为默认色彩 # Set some variables for interactive shells if ( $?prompt ) then if ( "$uid" == "0" ) then set prompt = "%B%U%n%u@%m.$cr%l$c0%b %c2 %B%#%b " else set prompt = "%B%U%n%u@%m.$cg%l$c0%b %c2 %B%%%b " endif endif Konsole中的效果如下: prompt3.png 颜色代码: 1 for brighter colors 4 for underlined text 5 for flashing text 30 for black foreground 31 for red foreground 32 for green foreground 33 for yellow (or brown) foreground 34 for blue foreground 35 for purple foreground 36 for cyan foreground 37 for white (or gray) foreground 40 for black background 41 for red background 42 for green background 43 for yellow (or brown) background 44 for blue background 45 for purple background 46 for cyan background 47 for white (or gray) background 查看更多参数,及其作用: man tcsh #查看man手册 /%/ #搜索到“%/”开始的地方 环境变量等 你在抱怨 FreeBSD下的 ls 没有显示颜色, grep 出来的东西没有高亮吗? 那么你需要如下的配置: 让 ls 鲜艳些 setenv LSCOLORS ExGxFxdxCxegedabagExExsetenv CLICOLOR yes 让 grep 匹配到的字符高亮 setenv GREP_OPTIONS --color=auto对于在KDE下使用fcitx的人,需要如下三行设置,其实就是fcitx安装完后所提示的内容,如果你够细心的话。setenv XMODIFIERS @im=fcitxsetenv QT_IM_MODULE ximsetenv GTK_IM_MODULE xim嗯, ls 有颜色了,但是等等,为何 tab 不能补全?你需要如下配置:set autolist若要在补全时也将历史记录(即命令history的输出)纳入参考范围,可以添加如下配置:set autoexpand而对与命令history本身,则提供了以下两项配置:set history = 100set savehist = 10第一项设置了历史记录暂存条数,默认为100;第二项设置了退出当前Shell时会将多少条最新的暂存条数写入~/.history,其取值显然不能大于set history。需要说明的是,在savehist的设置中,还可以使用类似set savehist = (10 merge)的写法;这里merge表示保存时合并历史记录中的相同命令,合并后的序列号、时间则与其中最新者相同。如果命令输错了,让csh/tcsh 为你纠正:set correct = cmd为了在命令行启动某个游戏,或者kde程序,例如dolphin、kcalc,你需要加两个路径到$path中去:/usr/games /usr/local/kde4/bin/ set path = (/sbin /bin /usr/sbin /usr/local/bin /usr/games /usr/local/sbin /usr/bin $HOME/bin /usr/local/kde4/bin/) 黑魔法防御术 重定向防御 重定向很强大,我们有时候会运行诸如“date » b.txt”,“ls -l > files.txt”等命令。然而如果一不小心,把“»”输成“>”会造成什么后果呢?为此,tcsh提供了noclobber这个选项:set noclobber有了它,悲剧就不会发生。如果“>”的目标文件已存在,tcsh会拒绝重定向。覆盖防御 是否遇到过“mv a b”,从而把有用的b文件覆盖掉了?为此,我们要让mv和cp的行为更谨慎:alias mv 'mv -i'alias cp 'cp -i'如果目标文件已存在,mv和cp会拒绝操作,除非使用参数“-f”。误删防御 rm这个命令自从诞生起,就一直是个危险的操作。我们可以让rm更温和:alias rm 'rm -i'这样rm之前,会要求再次确认。一切皆alias 前面,我们在黑魔法防御术中已经初步见识了alias。alias不仅可以避免危险操作,还可以简化命令,自创命令。除非极短,否则良好的alias命名,应当以某个统一的单词或字母开头,例如下面即将展示的reload/edit系列、update系列、show系列等。先展示最基本的alias,并逐条解释。alias .. 'cd ..' #两点即可回到上级目录alias - 'cd -' #一杠返回上次的目录alias q 'exit' #退出登录alias rm 'rm -i' #误删防御alias del 'rm -r' #删除整个目录alias mv 'mv -i' #覆盖防御alias cp 'cp -i' #覆盖防御alias ls 'ls -I' #root状态下,默认不显示隐藏文件(.*)。BSD的ls很特殊,root默认显示所有文件。alias la 'ls -a' #显示所有文件alias ll 'ls -h -l' #显示文件权限和大小(以合理的单位)alias lr 'ls -R' #递归显示目录alias dh 'df -h -a -T' #以合适的单位显示所有磁盘的剩余空间,以及文件系统类型(如ufs、devfs、procfs)。alias ds 'du -sh' #以合适的单位显示查看每个文件/文件夹的大小find/wc系列。快速查找当前目录下的所有c/cxx/python源码文件。结合wc可以统计行数。alias find-c 'find . -name ".h" -o -name ".c"'alias find-x 'find . -name ".h" -o -name ".hpp" -o -name ".cpp" -o -name ".cxx"'alias find-py 'find . -name ".py"'alias wc-c 'find . -name ".h" -o -name ".c" | xargs wc | sort -k 4'alias wc-x 'find . -name ".h" -o -name ".hpp" -o -name ".cpp" -o -name ".cxx" | xargs wc | sort -k 4'alias wc-py 'find . -name ".py" | xargs wc | sort -k 4'reload/edit系列。实现快速修改,载入配置文件。alias reload-rc.conf 'sh /etc/rc'alias reload-cshrc 'unalias * && source /etc/csh.cshrc'alias edit-xorg.conf 'vim /etc/xorg.conf'alias edit-csh.cshrc 'vim /etc/csh.cshrc'alias edit-make.conf 'vim /etc/make.conf'alias edit-kern.conf 'vim /etc/kernconf/thinkpad'alias edit-rc.conf 'vim /etc/rc.conf'alias edit-vimrc 'vim /usr/local/share/vim/vimrc'set系列。快速设置locale。 alias setlocale-zhcn 'setenv LC_ALL zh_CN.UTF-8 && setenv LANG zh_CN.UTF-8'alias setlocale-c 'setenv LC_ALL C'startx专用。保持命令行下为英文locale(避免date等命令出现乱码),而让x环境为中文,适合手动startx而不是kdm的人。 alias sx 'setenv LC_ALL zh_CN.UTF-8 && setenv LANG zh_CN.UTF-8 && startx && setenv LC_ALL C'make系列。快速编译kernel/world。 alias make-world 'cd /usr/src && make buildworld && cd -'alias make-kernel 'cd /usr/src && make kernel KERNCONF=thinkpad && cd -'alias make-installworld 'cd /usr/src && make installworld && make delete-old && cd -'show系列。查看状态或某些信息。 alias show-ifstat 'systat -ifstat' #查看网络接口的数据流量alias show-geom 'gstat' #查看I/O状态alias show-thermal 'sysctl dev.acpi_ibm.0.thermal' #查看ThinkPad笔记本的各部分温度alias show-cpufreq 'sysctl dev.cpu.0.freq' #查看当前cpu频率alias show-cpulevels 'sysctl dev.cpu.0.freq_levels' #查看可用的cpu频率alias show-battery 'sysctl hw.acpi.battery.life && sysctl hw.acpi.battery.time' #查看电力alias show-smartctl 'smartctl -a /dev/ad4' #需要安装smartmontools,查看磁盘smart参数alias show-alldep 'make all-depends-list' #需要在ports的安装目录下执行,显示所有依赖alias show-dep 'portmaster --show-work ./ | sort' #同上,且需要安装portmaster,只显示尚未安装的依赖alias show-ver 'pkg_version -v' #查看是否有软件可更新update系列。顾名思义,更新嘛。alias update-locatedb '/usr/libexec/locate.updatedb' #更新locate数据库alias update-kernsrc 'csup -L 2 /etc/supfiles/stable-supfile' #同步kernel treealias update-ports 'portsnap fetch update' #同步ports treealias update-apps 'portmaster -a --force-config' #需要安装portmaster,更新所有软件,提示配置选项杂项,均需要安装第三方软件才能用。 alias lt 'tree -N -C' #需要安装tree。树状显示目录,-N可以保证中文显示,-C使用彩色alias l3 'tree -N -C -L 3' #目录最多递归三级alias l4 'tree -N -C -L 4' #四级alias l5 'tree -N -C -L 5' #五级alias l6 'tree -N -C -L 6' #六级alias v 'vim' #不用说,我懒alias m 'mocp' #控制台下的cs架构播放器alias getdir 'wget -c -r -np -k' #递归下载目录alias ssh-home 'ssh raphael.vicp.cc -l root' #用root账号登录,结合key可以免输密码alias ftp-home 'ftp ftp://syh:syh@raphael.vicp.cc' #BSD自带的ftp,免输账号密码。主机已被电信和工信部和谐,勿再试alias lft-phome 'lftp raphael.vicp.cc -u syh,syh' #lftp的免输账号密码。alias scons 'scons -Q -j 4' #构建工具,默认4个线程进行alias valgrind-checkmem 'valgrind --tool=memcheck --leak-check=full' #检查内存泄漏
小旋风柴进 2019-12-02 02:35:10 0 浏览量 回答数 0

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 阿里云AIoT