IPFS的Python API参考手册

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

IPFS是一个分布式的全球一致性(参见 DHT与分布式一致性 )文件系统,结合了BT、P2P、DHT等的优势。目前IPFS已经提供了python api,可以访问集群中的IPFS服务。

  • 本文地址,https://my.oschina.net/u/2306127/blog/2046243

基础服务准备

  • 通过Helm在Kubernetes集群上安装IPFS。
  • IPFS在Kubernetes部署的服务开放。
  • IPFS服务的Python访问。
  • Kubernetes中通过python api访问IPFS服务。

安装ipfsapi库

pip install ipfsapi

获取API对象

import ipfsapi

api = ipfsapi.connect('ipfs2-ipfs.ipfs2', 5001)

获取帮助信息

help(api)

返回的IPFS Python API接口信息如下:

模块 ipfsapi.client 对象的说明信息:

class Client(builtins.object)
 |  TCP client对象,与IPFS daemon进行交互。
 |  
 |  A :class:`~ipfsapi.Client` 实例并不会立即建立一个到daemon的连接,直到其中的方法被调用.
 |  
 |  Parameters,#参数
 |  ----------
 |  host : str,#主机名或IP地址,字符串
 |      Hostname or IP address of the computer running the ``ipfs daemon``
 |      node (defaults to the local system)
 |  port : int,#端口,通常是5001
 |      The API port of the IPFS deamon (usually 5001)
 |  base : str,API的路径,目前是``api/v0``
 |      Path of the deamon's API (currently always ``api/v0``)
 |  chunk_size : int,# 分割的chunks的大小
 |      The size of the chunks to break uploaded files and text content into
 |  
 |  Methods defined here: # 方法定义
 |  
 |  __init__(self, host='localhost', port=5001, base='api/v0', chunk_size=4096, **defaults)
 |      Connects to the API port of an IPFS node.
 |  
 ##########################################################################
 #  添加文件
 |  add(self, files, recursive=False, pattern='**', *args, **kwargs)
 |      Add a file, or directory of files to IPFS.
 |      
 |      .. code-block:: python
 |      
 |          >>> with io.open('nurseryrhyme.txt', 'w', encoding='utf-8') as f:
 |          ...     numbytes = f.write('Mary had a little lamb')
 |          >>> c.add('nurseryrhyme.txt')
 |          {'Hash': 'QmZfF6C9j4VtoCsTp4KSrhYH47QMd3DNXVZBKaxJdhaPab',
 |           'Name': 'nurseryrhyme.txt'}
 |      
 |      Parameters
 |      ----------
 |      files : str
 |          A filepath to either a file or directory
 |      recursive : bool
 |          Controls if files in subdirectories are added or not
 |      pattern : str | list
 |          Single `*glob* `_
 |          pattern or list of *glob* patterns and compiled regular expressions
 |          to match the names of the filepaths to keep
 |      trickle : bool
 |          Use trickle-dag format (optimized for streaming) when generating
 |          the dag; see `the FAQ ` for
 |          more information (Default: ``False``)
 |      only_hash : bool
 |          Only chunk and hash, but do not write to disk (Default: ``False``)
 |      wrap_with_directory : bool
 |          Wrap files with a directory object to preserve their filename
 |          (Default: ``False``)
 |      chunker : str
 |          The chunking algorithm to use
 |      pin : bool
 |          Pin this object when adding (Default: ``True``)
 |      
 |      Returns
 |      -------
 |          dict: File name and hash of the added file node
 |  
 ##########################################################################
 #  添加bytes数组到IPFS 
 |  add_bytes(self, data, **kwargs)
 |      Adds a set of bytes as a file to IPFS.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.add_bytes(b"Mary had a little lamb")
 |          'QmZfF6C9j4VtoCsTp4KSrhYH47QMd3DNXVZBKaxJdhaPab'
 |      
 |      Also accepts and will stream generator objects.
 |      
 |      Parameters
 |      ----------
 |      data : bytes
 |          Content to be added as a file
 |      
 |      Returns
 |      -------
 |          str : Hash of the added IPFS object
 |  
 ##########################################################################
 # 添加Json字符串到IPFS
 |  add_json(self, json_obj, **kwargs)
 |      Adds a json-serializable Python dict as a json file to IPFS.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.add_json({'one': 1, 'two': 2, 'three': 3})
 |          'QmVz9g7m5u3oHiNKHj2CJX1dbG1gtismRS3g9NaPBBLbob'
 |      
 |      Parameters
 |      ----------
 |      json_obj : dict
 |          A json-serializable Python dictionary
 |      
 |      Returns
 |      -------
 |          str : Hash of the added IPFS object
 | 
 ##########################################################################
 #  添加python对象到IPFS。 
 |  add_pyobj(self, py_obj, **kwargs)
 |      Adds a picklable Python object as a file to IPFS.
 |      
 |      .. deprecated:: 0.4.2
 |         The ``*_pyobj`` APIs allow for arbitrary code execution if abused.
 |         Either switch to :meth:`~ipfsapi.Client.add_json` or use
 |         ``client.add_bytes(pickle.dumps(py_obj))`` instead.
 |      
 |      Please see :meth:`~ipfsapi.Client.get_pyobj` for the
 |      **security risks** of using these methods!
 |      
 |      .. code-block:: python
 |      
 |          >>> c.add_pyobj([0, 1.0, 2j, '3', 4e5])
 |          'QmWgXZSUTNNDD8LdkdJ8UXSn55KfFnNvTP1r7SyaQd74Ji'
 |      
 |      Parameters
 |      ----------
 |      py_obj : object
 |          A picklable Python object
 |      
 |      Returns
 |      -------
 |          str : Hash of the added IPFS object
 |
 ##########################################################################
 # 添加字符串对象到IPFS。  
 |  add_str(self, string, **kwargs)
 |      Adds a Python string as a file to IPFS.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.add_str(u"Mary had a little lamb")
 |          'QmZfF6C9j4VtoCsTp4KSrhYH47QMd3DNXVZBKaxJdhaPab'
 |      
 |      Also accepts and will stream generator objects.
 |      
 |      Parameters
 |      ----------
 |      string : str
 |          Content to be added as a file
 |      
 |      Returns
 |      -------
 |          str : Hash of the added IPFS object
 |
 ##########################################################################
 #  传输状态统计。  
 |  bitswap_stat(self, **kwargs)
 |      Returns some diagnostic information from the bitswap agent.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.bitswap_stat()
 |          {'BlocksReceived': 96,
 |           'DupBlksReceived': 73,
 |           'DupDataReceived': 2560601,
 |           'ProviderBufLen': 0,
 |           'Peers': [
 |              'QmNZFQRxt9RMNm2VVtuV2Qx7q69bcMWRVXmr5CEkJEgJJP',
 |              'QmNfCubGpwYZAQxX8LQDsYgB48C4GbfZHuYdexpX9mbNyT',
 |              'QmNfnZ8SCs3jAtNPc8kf3WJqJqSoX7wsX7VqkLdEYMao4u',
 |              …
 |           ],
 |           'Wantlist': [
 |              'QmeV6C6XVt1wf7V7as7Yak3mxPma8jzpqyhtRtCvpKcfBb',
 |              'QmdCWFLDXqgdWQY9kVubbEHBbkieKd3uo7MtCm7nTZZE9K',
 |              'QmVQ1XvYGF19X4eJqz1s7FJYJqAxFC4oqh3vWJJEXn66cp'
 |           ]
 |          }
 |      
 |      Returns
 |      -------
 |          dict : Statistics, peers and wanted blocks
 | 
 ##########################################################################
 # 移除指定的block。  
 |  bitswap_unwant(self, key, **kwargs)
 |      Remove a given block from wantlist.
 |      
 |      Parameters
 |      ----------
 |      key : str
 |          Key to remove from wantlist.
 |
 ##########################################################################
 # 返回待传输块列表。   
 |  bitswap_wantlist(self, peer=None, **kwargs)
 |      Returns blocks currently on the bitswap wantlist.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.bitswap_wantlist()
 |          {'Keys': [
 |              'QmeV6C6XVt1wf7V7as7Yak3mxPma8jzpqyhtRtCvpKcfBb',
 |              'QmdCWFLDXqgdWQY9kVubbEHBbkieKd3uo7MtCm7nTZZE9K',
 |              'QmVQ1XvYGF19X4eJqz1s7FJYJqAxFC4oqh3vWJJEXn66cp'
 |          ]}
 |      
 |      Parameters
 |      ----------
 |      peer : str
 |          Peer to show wantlist for.
 |      
 |      Returns
 |      -------
 |          dict : List of wanted blocks
 |
 ##########################################################################
 # 返回给定块的原始内容。   
 |  block_get(self, multihash, **kwargs)
 |      Returns the raw contents of a block.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.block_get('QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D')
 |          b'\x121\n"\x12 \xdaW>\x14\xe5\xc1\xf6\xe4\x92\xd1 … \n\x02\x08\x01'
 |      
 |      Parameters
 |      ----------
 |      multihash : str
 |          The base58 multihash of an existing block to get
 |      
 |      Returns
 |      -------
 |          str : Value of the requested block
 |
 ##########################################################################
 # 将文件作为IPFS块放入。   
 |  block_put(self, file, **kwargs)
 |      Stores the contents of the given file object as an IPFS block.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.block_put(io.BytesIO(b'Mary had a little lamb'))
 |              {'Key':  'QmeV6C6XVt1wf7V7as7Yak3mxPma8jzpqyhtRtCvpKcfBb',
 |               'Size': 22}
 |      
 |      Parameters
 |      ----------
 |      file : io.RawIOBase
 |          The data to be stored as an IPFS block
 |      
 |      Returns
 |      -------
 |          dict : Information about the new block
 |      
 |                 See :meth:`~ipfsapi.Client.block_stat`
 | 
 ##########################################################################
 # 统计块信息。  
 |  block_stat(self, multihash, **kwargs)
 |      Returns a dict with the size of the block with the given hash.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.block_stat('QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D')
 |          {'Key':  'QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D',
 |           'Size': 258}
 |      
 |      Parameters
 |      ----------
 |      multihash : str
 |          The base58 multihash of an existing block to stat
 |      
 |      Returns
 |      -------
 |          dict : Information about the requested block
 |
 ##########################################################################
 # 启动节点。   
 |  bootstrap(self, **kwargs)
 |      Compatiblity alias for :meth:`~ipfsapi.Client.bootstrap_list`.
 |
 ##########################################################################
 # 添加启动节点。  
 |  bootstrap_add(self, peer, *peers, **kwargs)
 |      Adds peers to the bootstrap list.
 |      
 |      Parameters
 |      ----------
 |      peer : str
 |          IPFS MultiAddr of a peer to add to the list
 |      
 |      Returns
 |      -------
 |          dict
 |
 ##########################################################################
 # 返回启动节点列表。  
 |  bootstrap_list(self, **kwargs)
 |      Returns the addresses of peers used during initial discovery of the
 |      IPFS network.
 |      
 |      Peers are output in the format ``/``.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.bootstrap_list()
 |          {'Peers': [
 |              '/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYER … uvuJ',
 |              '/ip4/104.236.176.52/tcp/4001/ipfs/QmSoLnSGccFuZQJzRa … ca9z',
 |              '/ip4/104.236.179.241/tcp/4001/ipfs/QmSoLPppuBtQSGwKD … KrGM',
 |              …
 |              '/ip4/178.62.61.185/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3p … QBU3']}
 |      
 |      Returns
 |      -------
 |          dict : List of known bootstrap peers
 |
 ##########################################################################
 # 移除启动节点。  
 |  bootstrap_rm(self, peer, *peers, **kwargs)
 |      Removes peers from the bootstrap list.
 |      
 |      Parameters
 |      ----------
 |      peer : str
 |          IPFS MultiAddr of a peer to remove from the list
 |      
 |      Returns
 |      -------
 |          dict
 | 
 ##########################################################################
 # 根据Hash返回内容。 
 |  cat(self, multihash, **kwargs)
 |      Retrieves the contents of a file identified by hash.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.cat('QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D')
 |          Traceback (most recent call last):
 |            ...
 |          ipfsapi.exceptions.Error: this dag node is a directory
 |          >>> c.cat('QmeKozNssnkJ4NcyRidYgDY2jfRZqVEoRGfipkgath71bX')
 |          b'\n\n\n\nipfs example viewer</…'
 |      
 |      Parameters
 |      ----------
 |      multihash : str
 |          The path to the IPFS object(s) to be retrieved
 |      
 |      Returns
 |      -------
 |          str : File contents
 |  
 ##########################################################################
 # 根据参数配置服务器环境。
 |  config(self, key, value=None, **kwargs)
 |      Controls configuration variables.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.config("Addresses.Gateway")
 |          {'Key': 'Addresses.Gateway', 'Value': '/ip4/127.0.0.1/tcp/8080'}
 |          >>> c.config("Addresses.Gateway", "/ip4/127.0.0.1/tcp/8081")
 |          {'Key': 'Addresses.Gateway', 'Value': '/ip4/127.0.0.1/tcp/8081'}
 |      
 |      Parameters
 |      ----------
 |      key : str
 |          The key of the configuration entry (e.g. "Addresses.API")
 |      value : dict
 |          The value to set the configuration entry to
 |      
 |      Returns
 |      -------
 |          dict : Requested/updated key and its (new) value
 |
 ##########################################################################
# 配置替换。  
 |  config_replace(self, *args, **kwargs)
 |      Replaces the existing config with a user-defined config.
 |      
 |      Make sure to back up the config file first if neccessary, as this
 |      operation can't be undone.
 |  
 |  config_show(self, **kwargs)
 |      Returns a dict containing the server's configuration.
 |      
 |      .. warning::
 |      
 |          The configuration file contains private key data that must be
 |          handled with care.
 |      
 |      .. code-block:: python
 |      
 |          >>> config = c.config_show()
 |          >>> config['Addresses']
 |          {'API': '/ip4/127.0.0.1/tcp/5001',
 |           'Gateway': '/ip4/127.0.0.1/tcp/8080',
 |           'Swarm': ['/ip4/0.0.0.0/tcp/4001', '/ip6/::/tcp/4001']},
 |          >>> config['Discovery']
 |          {'MDNS': {'Enabled': True, 'Interval': 10}}
 |      
 |      Returns
 |      -------
 |          dict : The entire IPFS daemon configuration
 | 
 ##########################################################################
 # 查找对端。 
 |  dht_findpeer(self, peer_id, *peer_ids, **kwargs)
 |      Queries the DHT for all of the associated multiaddresses.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.dht_findpeer("QmaxqKpiYNr62uSFBhxJAMmEMkT6dvc3oHkrZN … MTLZ")
 |          [{'ID': 'QmfVGMFrwW6AV6fTWmD6eocaTybffqAvkVLXQEFrYdk6yc',
 |            'Extra': '', 'Type': 6, 'Responses': None},
 |           {'ID': 'QmTKiUdjbRjeN9yPhNhG1X38YNuBdjeiV9JXYWzCAJ4mj5',
 |            'Extra': '', 'Type': 6, 'Responses': None},
 |           {'ID': 'QmTGkgHSsULk8p3AKTAqKixxidZQXFyF7mCURcutPqrwjQ',
 |            'Extra': '', 'Type': 6, 'Responses': None},
 |           …
 |           {'ID': '', 'Extra': '', 'Type': 2,
 |            'Responses': [
 |              {'ID': 'QmaxqKpiYNr62uSFBhxJAMmEMkT6dvc3oHkrZNpH2VMTLZ',
 |               'Addrs': [
 |                  '/ip4/10.9.8.1/tcp/4001',
 |                  '/ip6/::1/tcp/4001',
 |                  '/ip4/164.132.197.107/tcp/4001',
 |                  '/ip4/127.0.0.1/tcp/4001']}
 |            ]}]
 |      
 |      Parameters
 |      ----------
 |      peer_id : str
 |          The ID of the peer to search for
 |      
 |      Returns
 |      -------
 |          dict : List of multiaddrs
 |
 ##########################################################################
 # 查找DHT中给定的值。  
 |  dht_findprovs(self, multihash, *multihashes, **kwargs)
 |      Finds peers in the DHT that can provide a specific value.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.dht_findprovs("QmNPXDC6wTXVmZ9Uoc8X1oqxRRJr4f1sDuyQu … mpW2")
 |          [{'ID': 'QmaxqKpiYNr62uSFBhxJAMmEMkT6dvc3oHkrZNpH2VMTLZ',
 |            'Extra': '', 'Type': 6, 'Responses': None},
 |           {'ID': 'QmaK6Aj5WXkfnWGoWq7V8pGUYzcHPZp4jKQ5JtmRvSzQGk',
 |            'Extra': '', 'Type': 6, 'Responses': None},
 |           {'ID': 'QmdUdLu8dNvr4MVW1iWXxKoQrbG6y1vAVWPdkeGK4xppds',
 |            'Extra': '', 'Type': 6, 'Responses': None},
 |           …
 |           {'ID': '', 'Extra': '', 'Type': 4, 'Responses': [
 |              {'ID': 'QmVgNoP89mzpgEAAqK8owYoDEyB97Mk … E9Uc', 'Addrs': None}
 |            ]},
 |           {'ID': 'QmaxqKpiYNr62uSFBhxJAMmEMkT6dvc3oHkrZNpH2VMTLZ',
 |            'Extra': '', 'Type': 1, 'Responses': [
 |              {'ID': 'QmSHXfsmN3ZduwFDjeqBn1C8b1tcLkxK6yd … waXw', 'Addrs': [
 |                  '/ip4/127.0.0.1/tcp/4001',
 |                  '/ip4/172.17.0.8/tcp/4001',
 |                  '/ip6/::1/tcp/4001',
 |                  '/ip4/52.32.109.74/tcp/1028'
 |                ]}
 |            ]}]
 |      
 |      Parameters
 |      ----------
 |      multihash : str
 |          The DHT key to find providers for
 |      
 |      Returns
 |      -------
 |          dict : List of provider Peer IDs
 |
 ##########################################################################
# 返回给定key的值。  
 |  dht_get(self, key, *keys, **kwargs)
 |      Queries the DHT for its best value related to given key.
 |      
 |      There may be several different values for a given key stored in the
 |      DHT; in this context *best* means the record that is most desirable.
 |      There is no one metric for *best*: it depends entirely on the key type.
 |      For IPNS, *best* is the record that is both valid and has the highest
 |      sequence number (freshest). Different key types may specify other rules
 |      for they consider to be the *best*.
 |      
 |      Parameters
 |      ----------
 |      key : str
 |          One or more keys whose values should be looked up
 |      
 |      Returns
 |      -------
 |          str
 |
 ##########################################################################
 # 设置给定key的值。 
 |  dht_put(self, key, value, **kwargs)
 |      Writes a key/value pair to the DHT.
 |      
 |      Given a key of the form ``/foo/bar`` and a value of any form, this will
 |      write that value to the DHT with that key.
 |      
 |      Keys have two parts: a keytype (foo) and the key name (bar). IPNS uses
 |      the ``/ipns/`` keytype, and expects the key name to be a Peer ID. IPNS
 |      entries are formatted with a special strucutre.
 |      
 |      You may only use keytypes that are supported in your ``ipfs`` binary:
 |      ``go-ipfs`` currently only supports the ``/ipns/`` keytype. Unless you
 |      have a relatively deep understanding of the key's internal structure,
 |      you likely want to be using the :meth:`~ipfsapi.Client.name_publish`
 |      instead.
 |      
 |      Value is arbitrary text.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.dht_put("QmVgNoP89mzpgEAAqK8owYoDEyB97Mkc … E9Uc", "test123")
 |          [{'ID': 'QmfLy2aqbhU1RqZnGQyqHSovV8tDufLUaPfN1LNtg5CvDZ',
 |            'Extra': '', 'Type': 5, 'Responses': None},
 |           {'ID': 'QmZ5qTkNvvZ5eFq9T4dcCEK7kX8L7iysYEpvQmij9vokGE',
 |            'Extra': '', 'Type': 5, 'Responses': None},
 |           {'ID': 'QmYqa6QHCbe6eKiiW6YoThU5yBy8c3eQzpiuW22SgVWSB8',
 |            'Extra': '', 'Type': 6, 'Responses': None},
 |           …
 |           {'ID': 'QmP6TAKVDCziLmx9NV8QGekwtf7ZMuJnmbeHMjcfoZbRMd',
 |            'Extra': '', 'Type': 1, 'Responses': []}]
 |      
 |      Parameters
 |      ----------
 |      key : str
 |          A unique identifier
 |      value : str
 |          Abitrary text to associate with the input (2048 bytes or less)
 |      
 |      Returns
 |      -------
 |          list
 |
 ##########################################################################
 # 查询DHT。 
 |  dht_query(self, peer_id, *peer_ids, **kwargs)
 |      Finds the closest Peer IDs to a given Peer ID by querying the DHT.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.dht_query("/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDM … uvuJ")
 |          [{'ID': 'QmPkFbxAQ7DeKD5VGSh9HQrdS574pyNzDmxJeGrRJxoucF',
 |            'Extra': '', 'Type': 2, 'Responses': None},
 |           {'ID': 'QmR1MhHVLJSLt9ZthsNNhudb1ny1WdhY4FPW21ZYFWec4f',
 |            'Extra': '', 'Type': 2, 'Responses': None},
 |           {'ID': 'Qmcwx1K5aVme45ab6NYWb52K2TFBeABgCLccC7ntUeDsAs',
 |            'Extra': '', 'Type': 2, 'Responses': None},
 |           …
 |           {'ID': 'QmYYy8L3YD1nsF4xtt4xmsc14yqvAAnKksjo3F3iZs5jPv',
 |            'Extra': '', 'Type': 1, 'Responses': []}]
 |      
 |      Parameters
 |      ----------
 |      peer_id : str
 |          The peerID to run the query against
 |      
 |      Returns
 |      -------
 |          dict : List of peers IDs
 |
 ##########################################################################
 # 解析给定对象的域名。 
 |  dns(self, domain_name, recursive=False, **kwargs)
 |      Resolves DNS links to the referenced object.
 |      
 |      Multihashes are hard to remember, but domain names are usually easy to
 |      remember. To create memorable aliases for multihashes, DNS TXT records
 |      can point to other DNS links, IPFS objects, IPNS keys, etc.
 |      This command resolves those links to the referenced object.
 |      
 |      For example, with this DNS TXT record::
 |      
 |          >>> import dns.resolver
 |          >>> a = dns.resolver.query("ipfs.io", "TXT")
 |          >>> a.response.answer[0].items[0].to_text()
 |          '"dnslink=/ipfs/QmTzQ1JRkWErjk39mryYw2WVaphAZNAREyMchXzYQ7c15n"'
 |      
 |      The resolver will give::
 |      
 |          >>> c.dns("ipfs.io")
 |          {'Path': '/ipfs/QmTzQ1JRkWErjk39mryYw2WVaphAZNAREyMchXzYQ7c15n'}
 |      
 |      Parameters
 |      ----------
 |      domain_name : str
 |         The domain-name name to resolve
 |      recursive : bool
 |          Resolve until the name is not a DNS link
 |      
 |      Returns
 |      -------
 |          dict : Resource were a DNS entry points to
 | 
 ##########################################################################
 # 列出文件系统对象的目录内容。
 |  file_ls(self, multihash, **kwargs)
 |      Lists directory contents for Unix filesystem objects.
 |      
 |      The result contains size information. For files, the child size is the
 |      total size of the file contents. For directories, the child size is the
 |      IPFS link size.
 |      
 |      The path can be a prefixless reference; in this case, it is assumed
 |      that it is an ``/ipfs/`` reference and not ``/ipns/``.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.file_ls('QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D')
 |          {'Arguments': {'QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D':
 |                         'QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D'},
 |           'Objects': {
 |             'QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D': {
 |               'Hash': 'QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D',
 |               'Size': 0, 'Type': 'Directory',
 |               'Links': [
 |                 {'Hash': 'Qmd2xkBfEwEs9oMTk77A6jrsgurpF3ugXSg7dtPNFkcNMV',
 |                  'Name': 'Makefile', 'Size': 163,    'Type': 'File'},
 |                 {'Hash': 'QmeKozNssnkJ4NcyRidYgDY2jfRZqVEoRGfipkgath71bX',
 |                  'Name': 'example',  'Size': 1463,   'Type': 'File'},
 |                 {'Hash': 'QmZAL3oHMQYqsV61tGvoAVtQLs1WzRe1zkkamv9qxqnDuK',
 |                  'Name': 'home',     'Size': 3947,   'Type': 'Directory'},
 |                 {'Hash': 'QmZNPyKVriMsZwJSNXeQtVQSNU4v4KEKGUQaMT61LPahso',
 |                  'Name': 'lib',      'Size': 268261, 'Type': 'Directory'},
 |                 {'Hash': 'QmSY8RfVntt3VdxWppv9w5hWgNrE31uctgTiYwKir8eXJY',
 |                  'Name': 'published-version',
 |                  'Size': 47, 'Type': 'File'}
 |                 ]
 |             }
 |          }}
 |      
 |      Parameters
 |      ----------
 |      multihash : str
 |          The path to the object(s) to list links from
 |      
 |      Returns
 |      -------
 |          dict
 | 
 ##########################################################################
 # 文件内容复制。
 |  files_cp(self, source, dest, **kwargs)
 |      Copies files within the MFS.
 |      
 |      Due to the nature of IPFS this will not actually involve any of the
 |      file's content being copied.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.files_ls("/")
 |          {'Entries': [
 |              {'Size': 0, 'Hash': '', 'Name': 'Software', 'Type': 0},
 |              {'Size': 0, 'Hash': '', 'Name': 'test', 'Type': 0}
 |          ]}
 |          >>> c.files_cp("/test", "/bla")
 |          ''
 |          >>> c.files_ls("/")
 |          {'Entries': [
 |              {'Size': 0, 'Hash': '', 'Name': 'Software', 'Type': 0},
 |              {'Size': 0, 'Hash': '', 'Name': 'bla', 'Type': 0},
 |              {'Size': 0, 'Hash': '', 'Name': 'test', 'Type': 0}
 |          ]}
 |      
 |      Parameters
 |      ----------
 |      source : str
 |          Filepath within the MFS to copy from
 |      dest : str
 |          Destination filepath with the MFS to which the file will be
 |          copied to
 |
 ##########################################################################
 # 列出MFS中目录的内容。 
 |  files_ls(self, path, **kwargs)
 |      Lists contents of a directory in the MFS.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.files_ls("/")
 |          {'Entries': [
 |              {'Size': 0, 'Hash': '', 'Name': 'Software', 'Type': 0}
 |          ]}
 |      
 |      Parameters
 |      ----------
 |      path : str
 |          Filepath within the MFS
 |      
 |      Returns
 |      -------
 |          dict : Directory entries
 |
 ##########################################################################
 # 创建目录。 
 |  files_mkdir(self, path, parents=False, **kwargs)
 |      Creates a directory within the MFS.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.files_mkdir("/test")
 |          b''
 |      
 |      Parameters
 |      ----------
 |      path : str
 |          Filepath within the MFS
 |      parents : bool
 |          Create parent directories as needed and do not raise an exception
 |          if the requested directory already exists
 | 
 ##########################################################################
 # 删除文件和目录。
 |  files_mv(self, source, dest, **kwargs)
 |      Moves files and directories within the MFS.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.files_mv("/test/file", "/bla/file")
 |          b''
 |      
 |      Parameters
 |      ----------
 |      source : str
 |          Existing filepath within the MFS
 |      dest : str
 |          Destination to which the file will be moved in the MFS
 |
 ##########################################################################
 # 文件读取。  
 |  files_read(self, path, offset=0, count=None, **kwargs)
 |      Reads a file stored in the MFS.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.files_read("/bla/file")
 |          b'hi'
 |      
 |      Parameters
 |      ----------
 |      path : str
 |          Filepath within the MFS
 |      offset : int
 |          Byte offset at which to begin reading at
 |      count : int
 |          Maximum number of bytes to read
 |      
 |      Returns
 |      -------
 |          str : MFS file contents
 |  
 ##########################################################################
 # 文件移除。 
 |  files_rm(self, path, recursive=False, **kwargs)
 |      Removes a file from the MFS.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.files_rm("/bla/file")
 |          b''
 |      
 |      Parameters
 |      ----------
 |      path : str
 |          Filepath within the MFS
 |      recursive : bool
 |          Recursively remove directories?
 |
 ##########################################################################
 # 文件统计信息。   
 |  files_stat(self, path, **kwargs)
 |      Returns basic ``stat`` information for an MFS file
 |      (including its hash).
 |      
 |      .. code-block:: python
 |      
 |          >>> c.files_stat("/test")
 |          {'Hash': 'QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn',
 |           'Size': 0, 'CumulativeSize': 4, 'Type': 'directory', 'Blocks': 0}
 |      
 |      Parameters
 |      ----------
 |      path : str
 |          Filepath within the MFS
 |      
 |      Returns
 |      -------
 |          dict : MFS file information
 |
 ##########################################################################
 # 文件写入。   
 |  files_write(self, path, file, offset=0, create=False, truncate=False, count=None, **kwargs)
 |      Writes to a mutable file in the MFS.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.files_write("/test/file", io.BytesIO(b"hi"), create=True)
 |          b''
 |      
 |      Parameters
 |      ----------
 |      path : str
 |          Filepath within the MFS
 |      file : io.RawIOBase
 |          IO stream object with data that should be written
 |      offset : int
 |          Byte offset at which to begin writing at
 |      create : bool
 |          Create the file if it does not exist
 |      truncate : bool
 |          Truncate the file to size zero before writing
 |      count : int
 |          Maximum number of bytes to read from the source ``file``
 |
 ##########################################################################
 # 从IPFS系统中获取文件的内容。   
 |  get(self, multihash, **kwargs)
 |      Downloads a file, or directory of files from IPFS.
 |      
 |      Files are placed in the current working directory.
 |      
 |      Parameters
 |      ----------
 |      multihash : str
 |          The path to the IPFS object(s) to be outputted
 |
 ##########################################################################
 # 从IPFS系统中获取json字符串对象的内容。   
 |  get_json(self, multihash, **kwargs)
 |      Loads a json object from IPFS.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.get_json('QmVz9g7m5u3oHiNKHj2CJX1dbG1gtismRS3g9NaPBBLbob')
 |          {'one': 1, 'two': 2, 'three': 3}
 |      
 |      Parameters
 |      ----------
 |      multihash : str
 |         Multihash of the IPFS object to load
 |      
 |      Returns
 |      -------
 |          object : Deserialized IPFS JSON object value
 |
 ##########################################################################
 # 从IPFS系统中获取pyobject对象的内容。
 |  get_pyobj(self, multihash, **kwargs)
 |      Loads a pickled Python object from IPFS.
 |      
 |      .. deprecated:: 0.4.2
 |         The ``*_pyobj`` APIs allow for arbitrary code execution if abused.
 |         Either switch to :meth:`~ipfsapi.Client.get_json` or use
 |         ``pickle.loads(client.cat(multihash))`` instead.
 |      
 |      .. caution::
 |      
 |          The pickle module is not intended to be secure against erroneous or
 |          maliciously constructed data. Never unpickle data received from an
 |          untrusted or unauthenticated source.
 |      
 |          Please **read**
 |          `this article <https://www.cs.uic.edu/%7Es/musings/pickle/>`_ to
 |          understand the security risks of using this method!
 |      
 |      .. code-block:: python
 |      
 |          >>> c.get_pyobj('QmWgXZSUTNNDD8LdkdJ8UXSn55KfFnNvTP1r7SyaQd74Ji')
 |          [0, 1.0, 2j, '3', 400000.0]
 |      
 |      Parameters
 |      ----------
 |      multihash : str
 |          Multihash of the IPFS object to load
 |      
 |      Returns
 |      -------
 |          object : Deserialized IPFS Python object
 |
 ##########################################################################
 # 获取IPFS节点的ID。  
 |  id(self, peer=None, **kwargs)
 |      Shows IPFS Node ID info.
 |      
 |      Returns the PublicKey, ProtocolVersion, ID, AgentVersion and
 |      Addresses of the connected daemon or some other node.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.id()
 |          {'ID': 'QmVgNoP89mzpgEAAqK8owYoDEyB97MkcGvoWZir8otE9Uc',
 |          'PublicKey': 'CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggE … BAAE=',
 |          'AgentVersion': 'go-libp2p/3.3.4',
 |          'ProtocolVersion': 'ipfs/0.1.0',
 |          'Addresses': [
 |              '/ip4/127.0.0.1/tcp/4001/ipfs/QmVgNoP89mzpgEAAqK8owYo … E9Uc',
 |              '/ip4/10.1.0.172/tcp/4001/ipfs/QmVgNoP89mzpgEAAqK8owY … E9Uc',
 |              '/ip4/172.18.0.1/tcp/4001/ipfs/QmVgNoP89mzpgEAAqK8owY … E9Uc',
 |              '/ip6/::1/tcp/4001/ipfs/QmVgNoP89mzpgEAAqK8owYoDEyB97 … E9Uc',
 |              '/ip6/fccc:7904:b05b:a579:957b:deef:f066:cad9/tcp/400 … E9Uc',
 |              '/ip6/fd56:1966:efd8::212/tcp/4001/ipfs/QmVgNoP89mzpg … E9Uc',
 |              '/ip6/fd56:1966:efd8:0:def1:34d0:773:48f/tcp/4001/ipf … E9Uc',
 |              '/ip6/2001:db8:1::1/tcp/4001/ipfs/QmVgNoP89mzpgEAAqK8 … E9Uc',
 |              '/ip4/77.116.233.54/tcp/4001/ipfs/QmVgNoP89mzpgEAAqK8 … E9Uc',
 |              '/ip4/77.116.233.54/tcp/10842/ipfs/QmVgNoP89mzpgEAAqK … E9Uc']}
 |      
 |      Parameters
 |      ----------
 |      peer : str
 |          Peer.ID of the node to look up (local node if ``None``)
 |      
 |      Returns
 |      -------
 |          dict : Information about the IPFS node
 |
 ##########################################################################
 # 添加一个可用于name_publish的public key。  
 |  key_gen(self, key_name, type, size=2048, **kwargs)
 |      Adds a new public key that can be used for name_publish.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.key_gen('example_key_name')
 |          {'Name': 'example_key_name',
 |           'Id': 'QmQLaT5ZrCfSkXTH6rUKtVidcxj8jrW3X2h75Lug1AV7g8'}
 |      
 |      Parameters
 |      ----------
 |      key_name : str
 |          Name of the new Key to be generated. Used to reference the Keys.
 |      type : str
 |          Type of key to generate. The current possible keys types are:
 |      
 |           * ``"rsa"``
 |           * ``"ed25519"``
 |      size : int
 |          Bitsize of key to generate
 |      
 |      Returns
 |      -------
 |          dict : Key name and Key Id
 |
 ##########################################################################
 # 用于name_publish的key的列表。  
 |  key_list(self, **kwargs)
 |      Returns a list of generated public keys that can be used with name_publish
 |      
 |      .. code-block:: python
 |      
 |          >>> c.key_list()
 |          [{'Name': 'self',
 |            'Id': 'QmQf22bZar3WKmojipms22PkXH1MZGmvsqzQtuSvQE3uhm'},
 |           {'Name': 'example_key_name',
 |            'Id': 'QmQLaT5ZrCfSkXTH6rUKtVidcxj8jrW3X2h75Lug1AV7g8'}
 |          ]
 |      
 |      Returns
 |      -------
 |          list : List of dictionaries with Names and Ids of public keys.
 |
 ##########################################################################
 # 重新命名key。  
 |  key_rename(self, key_name, new_key_name, **kwargs)
 |      Rename a keypair
 |      
 |      .. code-block:: python
 |      
 |          >>> c.key_rename("bla", "personal")
 |          {"Was": "bla",
 |           "Now": "personal",
 |           "Id": "QmeyrRNxXaasZaoDXcCZgryoBCga9shaHQ4suHAYXbNZF3",
 |           "Overwrite": False}
 |      
 |      Parameters
 |      ----------
 |      key_name : str
 |          Current name of the key to rename
 |      new_key_name : str
 |          New name of the key
 |      
 |      Returns
 |      -------
 |          dict : List of key names and IDs that have been removed
 |
 ##########################################################################
 # 移除key。  
 |  key_rm(self, key_name, *key_names, **kwargs)
 |      Remove a keypair
 |      
 |      .. code-block:: python
 |      
 |          >>> c.key_rm("bla")
 |          {"Keys": [
 |              {"Name": "bla",
 |               "Id": "QmfJpR6paB6h891y7SYXGe6gapyNgepBeAYMbyejWA4FWA"}
 |          ]}
 |      
 |      Parameters
 |      ----------
 |      key_name : str
 |          Name of the key(s) to remove.
 |      
 |      Returns
 |      -------
 |          dict : List of key names and IDs that have been removed
 |
 ##########################################################################
 # Daemon日志的级别。  
 |  log_level(self, subsystem, level, **kwargs)
 |      Changes the logging output of a running daemon.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.log_level("path", "info")
 |          {'Message': "Changed log level of 'path' to 'info'\n"}
 |      
 |      Parameters
 |      ----------
 |      subsystem : str
 |          The subsystem logging identifier (Use ``"all"`` for all subsystems)
 |      level : str
 |          The desired logging level. Must be one of:
 |      
 |           * ``"debug"``
 |           * ``"info"``
 |           * ``"warning"``
 |           * ``"error"``
 |           * ``"fatal"``
 |           * ``"panic"``
 |      
 |      Returns
 |      -------
 |          dict : Status message
 |
 ##########################################################################
 # 列出Daemon日志的内容。  
 |  log_ls(self, **kwargs)
 |      Lists the logging subsystems of a running daemon.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.log_ls()
 |          {'Strings': [
 |              'github.com/ipfs/go-libp2p/p2p/host', 'net/identify',
 |              'merkledag', 'providers', 'routing/record', 'chunk', 'mfs',
 |              'ipns-repub', 'flatfs', 'ping', 'mockrouter', 'dagio',
 |              'cmds/files', 'blockset', 'engine', 'mocknet', 'config',
 |              'commands/http', 'cmd/ipfs', 'command', 'conn', 'gc',
 |              'peerstore', 'core', 'coreunix', 'fsrepo', 'core/server',
 |              'boguskey', 'github.com/ipfs/go-libp2p/p2p/host/routed',
 |              'diagnostics', 'namesys', 'fuse/ipfs', 'node', 'secio',
 |              'core/commands', 'supernode', 'mdns', 'path', 'table',
 |              'swarm2', 'peerqueue', 'mount', 'fuse/ipns', 'blockstore',
 |              'github.com/ipfs/go-libp2p/p2p/host/basic', 'lock', 'nat',
 |              'importer', 'corerepo', 'dht.pb', 'pin', 'bitswap_network',
 |              'github.com/ipfs/go-libp2p/p2p/protocol/relay', 'peer',
 |              'transport', 'dht', 'offlinerouting', 'tarfmt', 'eventlog',
 |              'ipfsaddr', 'github.com/ipfs/go-libp2p/p2p/net/swarm/addr',
 |              'bitswap', 'reprovider', 'supernode/proxy', 'crypto', 'tour',
 |              'commands/cli', 'blockservice']}
 |      
 |      Returns
 |      -------
 |          dict : List of daemon logging subsystems
 |
 ##########################################################################
 # 读取日志的输出。  
 |  log_tail(self, **kwargs)
 |      Reads log outputs as they are written.
 |      
 |      This function returns an iterator needs to be closed using a context
 |      manager (``with``-statement) or using the ``.close()`` method.
 |      
 |      .. code-block:: python
 |      
 |          >>> with c.log_tail() as log_tail_iter:
 |          ...     for item in log_tail_iter:
 |          ...         print(item)
 |          ...
 |          {"event":"updatePeer","system":"dht",
 |           "peerID":"QmepsDPxWtLDuKvEoafkpJxGij4kMax11uTH7WnKqD25Dq",
 |           "session":"7770b5e0-25ec-47cd-aa64-f42e65a10023",
 |           "time":"2016-08-22T13:25:27.43353297Z"}
 |          {"event":"handleAddProviderBegin","system":"dht",
 |           "peer":"QmepsDPxWtLDuKvEoafkpJxGij4kMax11uTH7WnKqD25Dq",
 |           "session":"7770b5e0-25ec-47cd-aa64-f42e65a10023",
 |           "time":"2016-08-22T13:25:27.433642581Z"}
 |          {"event":"handleAddProvider","system":"dht","duration":91704,
 |           "key":"QmNT9Tejg6t57Vs8XM2TVJXCwevWiGsZh3kB4HQXUZRK1o",
 |           "peer":"QmepsDPxWtLDuKvEoafkpJxGij4kMax11uTH7WnKqD25Dq",
 |           "session":"7770b5e0-25ec-47cd-aa64-f42e65a10023",
 |           "time":"2016-08-22T13:25:27.433747513Z"}
 |          {"event":"updatePeer","system":"dht",
 |           "peerID":"QmepsDPxWtLDuKvEoafkpJxGij4kMax11uTH7WnKqD25Dq",
 |           "session":"7770b5e0-25ec-47cd-aa64-f42e65a10023",
 |           "time":"2016-08-22T13:25:27.435843012Z"}
 |          …
 |      
 |      Returns
 |      -------
 |          iterable
 |  
 ##########################################################################
 # 返回给定hash值的对象列表。
 |  ls(self, multihash, **kwargs)
 |      Returns a list of objects linked to by the given hash.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.ls('QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D')
 |          {'Objects': [
 |            {'Hash': 'QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D',
 |             'Links': [
 |              {'Hash': 'Qmd2xkBfEwEs9oMTk77A6jrsgurpF3ugXSg7dtPNFkcNMV',
 |               'Name': 'Makefile',          'Size': 174, 'Type': 2},
 |               …
 |              {'Hash': 'QmSY8RfVntt3VdxWppv9w5hWgNrE31uctgTiYwKir8eXJY',
 |               'Name': 'published-version', 'Size': 55,  'Type': 2}
 |              ]}
 |            ]}
 |      
 |      Parameters
 |      ----------
 |      multihash : str
 |          The path to the IPFS object(s) to list links from
 |      
 |      Returns
 |      -------
 |          dict : Directory information and contents
 |
 ##########################################################################
 # 发布一个对象到IPNS系统。  
 |  name_publish(self, ipfs_path, resolve=True, lifetime='24h', ttl=None, key=None, **kwargs)
 |      Publishes an object to IPNS.
 |      
 |      IPNS is a PKI namespace, where names are the hashes of public keys, and
 |      the private key enables publishing new (signed) values. In publish, the
 |      default value of *name* is your own identity public key.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.name_publish('/ipfs/QmfZY61ukoQuCX8e5Pt7v8pRfhkyxwZK … GZ5d')
 |          {'Value': '/ipfs/QmfZY61ukoQuCX8e5Pt7v8pRfhkyxwZKZMTodAtmvyGZ5d',
 |           'Name': 'QmVgNoP89mzpgEAAqK8owYoDEyB97MkcGvoWZir8otE9Uc'}
 |      
 |      Parameters
 |      ----------
 |      ipfs_path : str
 |          IPFS path of the object to be published
 |      resolve : bool
 |          Resolve given path before publishing
 |      lifetime : str
 |          Time duration that the record will be valid for
 |      
 |          Accepts durations such as ``"300s"``, ``"1.5h"`` or ``"2h45m"``.
 |          Valid units are:
 |      
 |           * ``"ns"``
 |           * ``"us"`` (or ``"µs"``)
 |           * ``"ms"``
 |           * ``"s"``
 |           * ``"m"``
 |           * ``"h"``
 |      ttl : int
 |          Time duration this record should be cached for
 |      key : string
 |           Name of the key to be used, as listed by 'ipfs key list'.
 |      
 |      Returns
 |      -------
 |          dict : IPNS hash and the IPFS path it points at
 |
 ##########################################################################
 # 名称解析。  
 |  name_resolve(self, name=None, recursive=False, nocache=False, **kwargs)
 |      Gets the value currently published at an IPNS name.
 |      
 |      IPNS is a PKI namespace, where names are the hashes of public keys, and
 |      the private key enables publishing new (signed) values. In resolve, the
 |      default value of ``name`` is your own identity public key.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.name_resolve()
 |          {'Path': '/ipfs/QmfZY61ukoQuCX8e5Pt7v8pRfhkyxwZKZMTodAtmvyGZ5d'}
 |      
 |      Parameters
 |      ----------
 |      name : str
 |          The IPNS name to resolve (defaults to the connected node)
 |      recursive : bool
 |          Resolve until the result is not an IPFS name (default: false)
 |      nocache : bool
 |          Do not use cached entries (default: false)
 |      
 |      Returns
 |      -------
 |          dict : The IPFS path the IPNS hash points at
 |
 ##########################################################################
 # 获取IPFS对象的原始字节。  
 |  object_data(self, multihash, **kwargs)
 |      Returns the raw bytes in an IPFS object.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.object_data('QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D')
 |          b'\x08\x01'
 |      
 |      Parameters
 |      ----------
 |      multihash : str
 |          Key of the object to retrieve, in base58-encoded multihash format
 |      
 |      Returns
 |      -------
 |          str : Raw object data
 | 
 ##########################################################################
# 获取和序列化DAG节点。 
 |  object_get(self, multihash, **kwargs)
 |      Get and serialize the DAG node named by multihash.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.object_get('QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D')
 |          {'Data': ',
 |           'Links': [
 |              {'Hash': 'Qmd2xkBfEwEs9oMTk77A6jrsgurpF3ugXSg7dtPNFkcNMV',
 |               'Name': 'Makefile',          'Size': 174},
 |              {'Hash': 'QmeKozNssnkJ4NcyRidYgDY2jfRZqVEoRGfipkgath71bX',
 |               'Name': 'example',           'Size': 1474},
 |              {'Hash': 'QmZAL3oHMQYqsV61tGvoAVtQLs1WzRe1zkkamv9qxqnDuK',
 |               'Name': 'home',              'Size': 3947},
 |              {'Hash': 'QmZNPyKVriMsZwJSNXeQtVQSNU4v4KEKGUQaMT61LPahso',
 |               'Name': 'lib',               'Size': 268261},
 |              {'Hash': 'QmSY8RfVntt3VdxWppv9w5hWgNrE31uctgTiYwKir8eXJY',
 |               'Name': 'published-version', 'Size': 55}]}
 |      
 |      Parameters
 |      ----------
 |      multihash : str
 |          Key of the object to retrieve, in base58-encoded multihash format
 |      
 |      Returns
 |      -------
 |          dict : Object data and links
 |
 ##########################################################################
 # 获取指定object对象所指向的连接。  
 |  object_links(self, multihash, **kwargs)
 |      Returns the links pointed to by the specified object.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.object_links('QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDx … ca7D')
 |          {'Hash': 'QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D',
 |           'Links': [
 |              {'Hash': 'Qmd2xkBfEwEs9oMTk77A6jrsgurpF3ugXSg7dtPNFkcNMV',
 |               'Name': 'Makefile',          'Size': 174},
 |              {'Hash': 'QmeKozNssnkJ4NcyRidYgDY2jfRZqVEoRGfipkgath71bX',
 |               'Name': 'example',           'Size': 1474},
 |              {'Hash': 'QmZAL3oHMQYqsV61tGvoAVtQLs1WzRe1zkkamv9qxqnDuK',
 |               'Name': 'home',              'Size': 3947},
 |              {'Hash': 'QmZNPyKVriMsZwJSNXeQtVQSNU4v4KEKGUQaMT61LPahso',
 |               'Name': 'lib',               'Size': 268261},
 |              {'Hash': 'QmSY8RfVntt3VdxWppv9w5hWgNrE31uctgTiYwKir8eXJY',
 |               'Name': 'published-version', 'Size': 55}]}
 |      
 |      Parameters
 |      ----------
 |      multihash : str
 |          Key of the object to retrieve, in base58-encoded multihash format
 |      
 |      Returns
 |      -------
 |          dict : Object hash and merkedag links
 |
 ##########################################################################
 # 从IPFS模版创建新的对象。  
 |  object_new(self, template=None, **kwargs)
 |      Creates a new object from an IPFS template.
 |      
 |      By default this creates and returns a new empty merkledag node, but you
 |      may pass an optional template argument to create a preformatted node.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.object_new()
 |          {'Hash': 'QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n'}
 |      
 |      Parameters
 |      ----------
 |      template : str
 |          Blueprints from which to construct the new object. Possible values:
 |      
 |           * ``"unixfs-dir"``
 |           * ``None``
 |      
 |      Returns
 |      -------
 |          dict : Object hash
 |
 ##########################################################################
 # 从已有的对象创建一个新的merkledag对象。  
 |  object_patch_add_link(self, root, name, ref, create=False, **kwargs)
 |      Creates a new merkledag object based on an existing one.
 |      
 |      The new object will have a link to the provided object.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.object_patch_add_link(
 |          ...     'QmR79zQQj2aDfnrNgczUhvf2qWapEfQ82YQRt3QjrbhSb2',
 |          ...     'Johnny',
 |          ...     'QmR79zQQj2aDfnrNgczUhvf2qWapEfQ82YQRt3QjrbhSb2'
 |          ... )
 |          {'Hash': 'QmNtXbF3AjAk59gQKRgEdVabHcSsiPUnJwHnZKyj2x8Z3k'}
 |      
 |      Parameters
 |      ----------
 |      root : str
 |          IPFS hash for the object being modified
 |      name : str
 |          name for the new link
 |      ref : str
 |          IPFS hash for the object being linked to
 |      create : bool
 |          Create intermediary nodes
 |      
 |      Returns
 |      -------
 |          dict : Hash of new object
 |
 ##########################################################################
 # 从已有的对象创建一个新的merkledag对象。   
 |  object_patch_append_data(self, multihash, new_data, **kwargs)
 |      Creates a new merkledag object based on an existing one.
 |      
 |      The new object will have the provided data appended to it,
 |      and will thus have a new Hash.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.object_patch_append_data("QmZZmY … fTqm", io.BytesIO(b"bla"))
 |          {'Hash': 'QmR79zQQj2aDfnrNgczUhvf2qWapEfQ82YQRt3QjrbhSb2'}
 |      
 |      Parameters
 |      ----------
 |      multihash : str
 |          The hash of an ipfs object to modify
 |      new_data : io.RawIOBase
 |          The data to append to the object's data section
 |      
 |      Returns
 |      -------
 |          dict : Hash of new object
 |
 ##########################################################################
 # 从已有的对象创建一个新的merkledag对象。   
 |  object_patch_rm_link(self, root, link, **kwargs)
 |      Creates a new merkledag object based on an existing one.
 |      
 |      The new object will lack a link to the specified object.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.object_patch_rm_link(
 |          ...     'QmNtXbF3AjAk59gQKRgEdVabHcSsiPUnJwHnZKyj2x8Z3k',
 |          ...     'Johnny'
 |          ... )
 |          {'Hash': 'QmR79zQQj2aDfnrNgczUhvf2qWapEfQ82YQRt3QjrbhSb2'}
 |      
 |      Parameters
 |      ----------
 |      root : str
 |          IPFS hash of the object to modify
 |      link : str
 |          name of the link to remove
 |      
 |      Returns
 |      -------
 |          dict : Hash of new object
 |  
 |  object_patch_set_data(self, root, data, **kwargs)
 |      Creates a new merkledag object based on an existing one.
 |      
 |      The new object will have the same links as the old object but
 |      with the provided data instead of the old object's data contents.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.object_patch_set_data(
 |          ...     'QmNtXbF3AjAk59gQKRgEdVabHcSsiPUnJwHnZKyj2x8Z3k',
 |          ...     io.BytesIO(b'bla')
 |          ... )
 |          {'Hash': 'QmSw3k2qkv4ZPsbu9DVEJaTMszAQWNgM1FTFYpfZeNQWrd'}
 |      
 |      Parameters
 |      ----------
 |      root : str
 |          IPFS hash of the object to modify
 |      data : io.RawIOBase
 |          The new data to store in root
 |      
 |      Returns
 |      -------
 |          dict : Hash of new object
 |
 ##########################################################################
 # 存储DAG对象并返回key。   
 |  object_put(self, file, **kwargs)
 |      Stores input as a DAG object and returns its key.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.object_put(io.BytesIO(b'''
 |          ...       {
 |          ...           "Data": "another",
 |          ...           "Links": [ {
 |          ...               "Name": "some link",
 |          ...               "Hash": "QmXg9Pp2ytZ14xgmQjYEiHjVjMFXzCV … R39V",
 |          ...               "Size": 8
 |          ...           } ]
 |          ...       }'''))
 |          {'Hash': 'QmZZmY4KCu9r3e7M2Pcn46Fc5qbn6NpzaAGaYb22kbfTqm',
 |           'Links': [
 |              {'Hash': 'QmXg9Pp2ytZ14xgmQjYEiHjVjMFXzCVVEcRTWJBmLgR39V',
 |               'Size': 8, 'Name': 'some link'}
 |           ]
 |          }
 |      
 |      Parameters
 |      ----------
 |      file : io.RawIOBase
 |          (JSON) object from which the DAG object will be created
 |      
 |      Returns
 |      -------
 |          dict : Hash and links of the created DAG object
 |      
 |                 See :meth:`~ipfsapi.Object.object_links`
 |
 ##########################################################################
 # 获得DAG对象的统计信息。   
 |  object_stat(self, multihash, **kwargs)
 |      Get stats for the DAG node named by multihash.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.object_stat('QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D')
 |          {'LinksSize': 256, 'NumLinks': 5,
 |           'Hash': 'QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D',
 |           'BlockSize': 258, 'CumulativeSize': 274169, 'DataSize': 2}
 |      
 |      Parameters
 |      ----------
 |      multihash : str
 |          Key of the object to retrieve, in base58-encoded multihash format
 |      
 |      Returns
 |      -------
 |          dict
 |

 ##########################################################################
 # “钉住”对象到本地存储。   
 |  pin_add(self, path, *paths, **kwargs)
 |      Pins objects to local storage.
 |      
 |      Stores an IPFS object(s) from a given path locally to disk.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.pin_add("QmfZY61ukoQuCX8e5Pt7v8pRfhkyxwZKZMTodAtmvyGZ5d")
 |          {'Pins': ['QmfZY61ukoQuCX8e5Pt7v8pRfhkyxwZKZMTodAtmvyGZ5d']}
 |      
 |      Parameters
 |      ----------
 |      path : str
 |          Path to object(s) to be pinned
 |      recursive : bool
 |          Recursively unpin the object linked to by the specified object(s)
 |      
 |      Returns
 |      -------
 |          dict : List of IPFS objects that have been pinned
 |
 ##########################################################################
 # 列出本地“钉住”对象的列表。  
 |  pin_ls(self, type='all', **kwargs)
 |      Lists objects pinned to local storage.
 |      
 |      By default, all pinned objects are returned, but the ``type`` flag or
 |      arguments can restrict that to a specific pin type or to some specific
 |      objects respectively.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.pin_ls()
 |          {'Keys': {
 |              'QmNNPMA1eGUbKxeph6yqV8ZmRkdVat … YMuz': {'Type': 'recursive'},
 |              'QmNPZUCeSN5458Uwny8mXSWubjjr6J … kP5e': {'Type': 'recursive'},
 |              'QmNg5zWpRMxzRAVg7FTQ3tUxVbKj8E … gHPz': {'Type': 'indirect'},
 |              …
 |              'QmNiuVapnYCrLjxyweHeuk6Xdqfvts … wCCe': {'Type': 'indirect'}}}
 |      
 |      Parameters
 |      ----------
 |      type : "str"
 |          The type of pinned keys to list. Can be:
 |      
 |           * ``"direct"``
 |           * ``"indirect"``
 |           * ``"recursive"``
 |           * ``"all"``
 |      
 |      Returns
 |      -------
 |          dict : Hashes of pinned IPFS objects and why they are pinned
 |
 ##########################################################################
 # 移除本地存储的“钉住”对象。  
 |  pin_rm(self, path, *paths, **kwargs)
 |      Removes a pinned object from local storage.
 |      
 |      Removes the pin from the given object allowing it to be garbage
 |      collected if needed.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.pin_rm('QmfZY61ukoQuCX8e5Pt7v8pRfhkyxwZKZMTodAtmvyGZ5d')
 |          {'Pins': ['QmfZY61ukoQuCX8e5Pt7v8pRfhkyxwZKZMTodAtmvyGZ5d']}
 |      
 |      Parameters
 |      ----------
 |      path : str
 |          Path to object(s) to be unpinned
 |      recursive : bool
 |          Recursively unpin the object linked to by the specified object(s)
 |      
 |      Returns
 |      -------
 |          dict : List of IPFS objects that have been unpinned
 |
 ##########################################################################
 # 更新本地存储的“钉住”对象。   
 |  pin_update(self, from_path, to_path, **kwargs)
 |      Replaces one pin with another.
 |      
 |      Updates one pin to another, making sure that all objects in the new pin
 |      are local. Then removes the old pin. This is an optimized version of
 |      using first using :meth:`~ipfsapi.Client.pin_add` to add a new pin
 |      for an object and then using :meth:`~ipfsapi.Client.pin_rm` to remove
 |      the pin for the old object.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.pin_update("QmXMqez83NU77ifmcPs5CkNRTMQksBLkyfBf4H5g1NZ52P",
 |          ...              "QmUykHAi1aSjMzHw3KmBoJjqRUQYNkFXm8K1y7ZsJxpfPH")
 |          {"Pins": ["/ipfs/QmXMqez83NU77ifmcPs5CkNRTMQksBLkyfBf4H5g1NZ52P",
 |                    "/ipfs/QmUykHAi1aSjMzHw3KmBoJjqRUQYNkFXm8K1y7ZsJxpfPH"]}
 |      
 |      Parameters
 |      ----------
 |      from_path : str
 |          Path to the old object
 |      to_path : str
 |          Path to the new object to be pinned
 |      unpin : bool
 |          Should the pin of the old object be removed? (Default: ``True``)
 |      
 |      Returns
 |      -------
 |          dict : List of IPFS objects affected by the pinning operation
 |
 ##########################################################################
 # 校验本地存储的递归“钉住”对象是否完成。   
 |  pin_verify(self, path, *paths, **kwargs)
 |      Verify that recursive pins are complete.
 |      
 |      Scan the repo for pinned object graphs and check their integrity.
 |      Issues will be reported back with a helpful human-readable error
 |      message to aid in error recovery. This is useful to help recover
 |      from datastore corruptions (such as when accidentally deleting
 |      files added using the filestore backend).
 |      
 |      This function returns an iterator needs to be closed using a context
 |      manager (``with``-statement) or using the ``.close()`` method.
 |      
 |      .. code-block:: python
 |      
 |          >>> with c.pin_verify("QmN…TTZ", verbose=True) as pin_verify_iter:
 |          ...     for item in pin_verify_iter:
 |          ...         print(item)
 |          ...
 |          {"Cid":"QmVkNdzCBukBRdpyFiKPyL2R15qPExMr9rV9RFV2kf9eeV","Ok":True}
 |          {"Cid":"QmbPzQruAEFjUU3gQfupns6b8USr8VrD9H71GrqGDXQSxm","Ok":True}
 |          {"Cid":"Qmcns1nUvbeWiecdGDPw8JxWeUfxCV8JKhTfgzs3F8JM4P","Ok":True}
 |          …
 |      
 |      Parameters
 |      ----------
 |      path : str
 |          Path to object(s) to be checked
 |      verbose : bool
 |          Also report status of items that were OK? (Default: ``False``)
 |      
 |      Returns
 |      -------
 |          iterable
 |

 ##########################################################################
 # 测试对端的连通性。   
 |  ping(self, peer, *peers, **kwargs)
 |      Provides round-trip latency information for the routing system.
 |      
 |      Finds nodes via the routing system, sends pings, waits for pongs,
 |      and prints out round-trip latency information.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.ping("QmTzQ1JRkWErjk39mryYw2WVaphAZNAREyMchXzYQ7c15n")
 |          [{'Success': True,  'Time': 0,
 |            'Text': 'Looking up peer QmTzQ1JRkWErjk39mryYw2WVaphAZN … c15n'},
 |           {'Success': False, 'Time': 0,
 |            'Text': 'Peer lookup error: routing: not found'}]
 |      
 |      Parameters
 |      ----------
 |      peer : str
 |          ID of peer to be pinged
 |      count : int
 |          Number of ping messages to send (Default: ``10``)
 |      
 |      Returns
 |      -------
 |          list : Progress reports from the ping
 |

 ##########################################################################
 # 列出“出版-订阅”的主题名称。   
 |  pubsub_ls(self, **kwargs)
 |      Lists subscribed topics by name
 |      
 |      This method returns data that contains a list of
 |      all topics the user is subscribed to. In order
 |      to subscribe to a topic pubsub_sub must be called.
 |      
 |      .. code-block:: python
 |      
 |          # subscribe to a channel
 |          >>> with c.pubsub_sub("hello") as sub:
 |          ...     c.pubsub_ls()
 |          {
 |              'Strings' : ["hello"]
 |          }
 |      
 |      Returns
 |      -------
 |          dict : Dictionary with the key "Strings" who's value is an array of
 |                 topics we are subscribed to
 |
 ##########################################################################
 # 列出“出版-订阅”的对端。 
 |  pubsub_peers(self, topic=None, **kwargs)
 |      List the peers we are pubsubbing with.
 |      
 |      Lists the id's of other IPFS users who we
 |      are connected to via some topic. Without specifying
 |      a topic, IPFS peers from all subscribed topics
 |      will be returned in the data. If a topic is specified
 |      only the IPFS id's of the peers from the specified
 |      topic will be returned in the data.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.pubsub_peers()
 |          {'Strings':
 |                  [
 |                      'QmPbZ3SDgmTNEB1gNSE9DEf4xT8eag3AFn5uo7X39TbZM8',
 |                      'QmQKiXYzoFpiGZ93DaFBFDMDWDJCRjXDARu4wne2PRtSgA',
 |                      ...
 |                      'QmepgFW7BHEtU4pZJdxaNiv75mKLLRQnPi1KaaXmQN4V1a'
 |                  ]
 |          }
 |      
 |          ## with a topic
 |      
 |          # subscribe to a channel
 |          >>> with c.pubsub_sub('hello') as sub:
 |          ...     c.pubsub_peers(topic='hello')
 |          {'String':
 |                  [
 |                      'QmPbZ3SDgmTNEB1gNSE9DEf4xT8eag3AFn5uo7X39TbZM8',
 |                      ...
 |                      # other peers connected to the same channel
 |                  ]
 |          }
 |      
 |      Parameters
 |      ----------
 |      topic : str
 |          The topic to list connected peers of
 |          (defaults to None which lists peers for all topics)
 |      
 |      Returns
 |      -------
 |          dict : Dictionary with the ke "Strings" who's value is id of IPFS
 |                 peers we're pubsubbing with
 |
 ##########################################################################
 # 向“出版-订阅”的主题发送消息。  
 |  pubsub_pub(self, topic, payload, **kwargs)
 |      Publish a message to a given pubsub topic
 |      
 |      Publishing will publish the given payload (string) to
 |      everyone currently subscribed to the given topic.
 |      
 |      All data (including the id of the publisher) is automatically
 |      base64 encoded when published.
 |      
 |      .. code-block:: python
 |      
 |          # publishes the message 'message' to the topic 'hello'
 |          >>> c.pubsub_pub('hello', 'message')
 |          []
 |      
 |      Parameters
 |      ----------
 |      topic : str
 |          Topic to publish to
 |      payload : Data to be published to the given topic
 |      
 |      Returns
 |      -------
 |          list : empty list
 |
 ##########################################################################
 # 订阅“出版-订阅”的给定主题。  
 |  pubsub_sub(self, topic, discover=False, **kwargs)
 |      Subscribe to mesages on a given topic
 |      
 |      Subscribing to a topic in IPFS means anytime
 |      a message is published to a topic, the subscribers
 |      will be notified of the publication.
 |      
 |      The connection with the pubsub topic is opened and read.
 |      The Subscription returned should be used inside a context
 |      manager to ensure that it is closed properly and not left
 |      hanging.
 |      
 |      .. code-block:: python
 |      
 |          >>> sub = c.pubsub_sub('testing')
 |          >>> with c.pubsub_sub('testing') as sub:
 |          # publish a message 'hello' to the topic 'testing'
 |          ... c.pubsub_pub('testing', 'hello')
 |          ... for message in sub:
 |          ...     print(message)
 |          ...     # Stop reading the subscription after 
 |          ...     # we receive one publication
 |          ...     break
 |          {'from': '<base64encoded IPFS id>',
 |           'data': 'aGVsbG8=',
 |           'topicIDs': ['testing']}
 |      
 |          # NOTE: in order to receive published data
 |          # you must already be subscribed to the topic at publication
 |          # time.
 |      
 |      Parameters
 |      ----------
 |      topic : str
 |          Name of a topic to subscribe to
 |      
 |      discover : bool
 |          Try to discover other peers subscibed to the same topic
 |          (defaults to False)
 |      
 |      Returns
 |      -------
 |          Generator wrapped in a context
 |          manager that maintains a connection
 |          stream to the given topic.
 |  

 ##########################################################################
 # 返回给定Hash的引用对象的hash列表。
 |  refs(self, multihash, **kwargs)
 |      Returns a list of hashes of objects referenced by the given hash.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.refs('QmTkzDwWqPbnAh5YiV5VwcTLnGdwSNsNTn2aDxdXBFca7D')
 |          [{'Ref': 'Qmd2xkBfEwEs9oMTk77A6jrsgurpF3ugXSg7 … cNMV', 'Err': ''},
 |           …
 |           {'Ref': 'QmSY8RfVntt3VdxWppv9w5hWgNrE31uctgTi … eXJY', 'Err': ''}]
 |      
 |      Parameters
 |      ----------
 |      multihash : str
 |          Path to the object(s) to list refs from
 |      
 |      Returns
 |      -------
 |          list
 | 
 ##########################################################################
 # 列出所有本地对象的hash。 
 |  refs_local(self, **kwargs)
 |      Displays the hashes of all local objects.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.refs_local()
 |          [{'Ref': 'Qmd2xkBfEwEs9oMTk77A6jrsgurpF3ugXSg7 … cNMV', 'Err': ''},
 |           …
 |           {'Ref': 'QmSY8RfVntt3VdxWppv9w5hWgNrE31uctgTi … eXJY', 'Err': ''}]
 |      
 |      Returns
 |      -------
 |          list
 |  

 ##########################################################################
 # 从repo中移除所有未被“钉住”的对象。
 |  repo_gc(self, **kwargs)
 |      Removes stored objects that are not pinned from the repo.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.repo_gc()
 |          [{'Key': 'QmNPXDC6wTXVmZ9Uoc8X1oqxRRJr4f1sDuyQuwaHG2mpW2'},
 |           {'Key': 'QmNtXbF3AjAk59gQKRgEdVabHcSsiPUnJwHnZKyj2x8Z3k'},
 |           {'Key': 'QmRVBnxUCsD57ic5FksKYadtyUbMsyo9KYQKKELajqAp4q'},
 |           …
 |           {'Key': 'QmYp4TeCurXrhsxnzt5wqLqqUz8ZRg5zsc7GuUrUSDtwzP'}]
 |      
 |      Performs a garbage collection sweep of the local set of
 |      stored objects and remove ones that are not pinned in order
 |      to reclaim hard disk space. Returns the hashes of all collected
 |      objects.
 |      
 |      Returns
 |      -------
 |          dict : List of IPFS objects that have been removed
 |
 ##########################################################################
 # 显示repo的状态。  
 |  repo_stat(self, **kwargs)
 |      Displays the repo's status.
 |      
 |      Returns the number of objects in the repo and the repo's size,
 |      version, and path.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.repo_stat()
 |          {'NumObjects': 354,
 |           'RepoPath': '…/.local/share/ipfs',
 |           'Version': 'fs-repo@4',
 |           'RepoSize': 13789310}
 |      
 |      Returns
 |      -------
 |          dict : General information about the IPFS file repository
 |      
 |      +------------+-------------------------------------------------+
 |      | NumObjects | Number of objects in the local repo.            |
 |      +------------+-------------------------------------------------+
 |      | RepoPath   | The path to the repo being currently used.      |
 |      +------------+-------------------------------------------------+
 |      | RepoSize   | Size in bytes that the repo is currently using. |
 |      +------------+-------------------------------------------------+
 |      | Version    | The repo version.                               |
 |      +------------+-------------------------------------------------+
 |

 ##########################################################################
 # 接受标识并解析到引用项。  
 |  resolve(self, name, recursive=False, **kwargs)
 |      Accepts an identifier and resolves it to the referenced item.
 |      
 |      There are a number of mutable name protocols that can link among
 |      themselves and into IPNS. For example IPNS references can (currently)
 |      point at an IPFS object, and DNS links can point at other DNS links,
 |      IPNS entries, or IPFS objects. This command accepts any of these
 |      identifiers.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.resolve("/ipfs/QmTkzDwWqPbnAh5YiV5VwcTLnGdw … ca7D/Makefile")
 |          {'Path': '/ipfs/Qmd2xkBfEwEs9oMTk77A6jrsgurpF3ugXSg7dtPNFkcNMV'}
 |          >>> c.resolve("/ipns/ipfs.io")
 |          {'Path': '/ipfs/QmTzQ1JRkWErjk39mryYw2WVaphAZNAREyMchXzYQ7c15n'}
 |      
 |      Parameters
 |      ----------
 |      name : str
 |          The name to resolve
 |      recursive : bool
 |          Resolve until the result is an IPFS name
 |      
 |      Returns
 |      -------
 |          dict : IPFS path of resource
 |

 ##########################################################################
 # 停止IPFS daemon服务。  
 |  shutdown(self)
 |      Stop the connected IPFS daemon instance.
 |      
 |      Sending any further requests after this will fail with
 |      ``ipfsapi.exceptions.ConnectionError``, until you start another IPFS
 |      daemon instance.
 |  
 |  swarm_addrs(self, **kwargs)
 |      Returns the addresses of currently connected peers by peer id.
 |      
 |      .. code-block:: python
 |      
 |          >>> pprint(c.swarm_addrs())
 |          {'Addrs': {
 |              'QmNMVHJTSZHTWMWBbmBrQgkA1hZPWYuVJx2DpSGESWW6Kn': [
 |                  '/ip4/10.1.0.1/tcp/4001',
 |                  '/ip4/127.0.0.1/tcp/4001',
 |                  '/ip4/51.254.25.16/tcp/4001',
 |                  '/ip6/2001:41d0:b:587:3cae:6eff:fe40:94d8/tcp/4001',
 |                  '/ip6/2001:470:7812:1045::1/tcp/4001',
 |                  '/ip6/::1/tcp/4001',
 |                  '/ip6/fc02:2735:e595:bb70:8ffc:5293:8af8:c4b7/tcp/4001',
 |                  '/ip6/fd00:7374:6172:100::1/tcp/4001',
 |                  '/ip6/fd20:f8be:a41:0:c495:aff:fe7e:44ee/tcp/4001',
 |                  '/ip6/fd20:f8be:a41::953/tcp/4001'],
 |              'QmNQsK1Tnhe2Uh2t9s49MJjrz7wgPHj4VyrZzjRe8dj7KQ': [
 |                  '/ip4/10.16.0.5/tcp/4001',
 |                  '/ip4/127.0.0.1/tcp/4001',
 |                  '/ip4/172.17.0.1/tcp/4001',
 |                  '/ip4/178.62.107.36/tcp/4001',
 |                  '/ip6/::1/tcp/4001'],
 |              …
 |          }}
 |      
 |      Returns
 |      -------
 |          dict : Multiaddrs of peers by peer id
 |
 
 ##########################################################################
 # 连接到给定的地址。 
 |  swarm_connect(self, address, *addresses, **kwargs)
 |      Opens a connection to a given address.
 |      
 |      This will open a new direct connection to a peer address. The address
 |      format is an IPFS multiaddr::
 |      
 |          /ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
 |      
 |      .. code-block:: python
 |      
 |          >>> c.swarm_connect("/ip4/104.131.131.82/tcp/4001/ipfs/Qma … uvuJ")
 |          {'Strings': ['connect QmaCpDMGvV2BGHeYERUEnRQAwe3 … uvuJ success']}
 |      
 |      Parameters
 |      ----------
 |      address : str
 |          Address of peer to connect to
 |      
 |      Returns
 |      -------
 |          dict : Textual connection status report
 |
 ##########################################################################
 # 断开给定地址的连接。  
 |  swarm_disconnect(self, address, *addresses, **kwargs)
 |      Closes the connection to a given address.
 |      
 |      This will close a connection to a peer address. The address format is
 |      an IPFS multiaddr::
 |      
 |          /ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
 |      
 |      The disconnect is not permanent; if IPFS needs to talk to that address
 |      later, it will reconnect.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.swarm_disconnect("/ip4/104.131.131.82/tcp/4001/ipfs/Qm … uJ")
 |          {'Strings': ['disconnect QmaCpDMGvV2BGHeYERUEnRQA … uvuJ success']}
 |      
 |      Parameters
 |      ----------
 |      address : str
 |          Address of peer to disconnect from
 |      
 |      Returns
 |      -------
 |          dict : Textual connection status report
 |
 ##########################################################################
 # 添加地址过滤器到过滤器列表。  
 |  swarm_filters_add(self, address, *addresses, **kwargs)
 |      Adds a given multiaddr filter to the filter list.
 |      
 |      This will add an address filter to the daemons swarm. Filters applied
 |      this way will not persist daemon reboots, to achieve that, add your
 |      filters to the configuration file.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.swarm_filters_add("/ip4/192.168.0.0/ipcidr/16")
 |          {'Strings': ['/ip4/192.168.0.0/ipcidr/16']}
 |      
 |      Parameters
 |      ----------
 |      address : str
 |          Multiaddr to filter
 |      
 |      Returns
 |      -------
 |          dict : List of swarm filters added
 |
 ##########################################################################
 # 移除地址过滤器。  
 |  swarm_filters_rm(self, address, *addresses, **kwargs)
 |      Removes a given multiaddr filter from the filter list.
 |      
 |      This will remove an address filter from the daemons swarm. Filters
 |      removed this way will not persist daemon reboots, to achieve that,
 |      remove your filters from the configuration file.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.swarm_filters_rm("/ip4/192.168.0.0/ipcidr/16")
 |          {'Strings': ['/ip4/192.168.0.0/ipcidr/16']}
 |      
 |      Parameters
 |      ----------
 |      address : str
 |          Multiaddr filter to remove
 |      
 |      Returns
 |      -------
 |          dict : List of swarm filters removed
 |
 ##########################################################################
 # 返回当前联机的对端地址和列表。  
 |  swarm_peers(self, **kwargs)
 |      Returns the addresses & IDs of currently connected peers.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.swarm_peers()
 |          {'Strings': [
 |              '/ip4/101.201.40.124/tcp/40001/ipfs/QmZDYAhmMDtnoC6XZ … kPZc',
 |              '/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYER … uvuJ',
 |              '/ip4/104.223.59.174/tcp/4001/ipfs/QmeWdgoZezpdHz1PX8 … 1jB6',
 |              …
 |              '/ip6/fce3: … :f140/tcp/43901/ipfs/QmSoLnSGccFuZQJzRa … ca9z']}
 |      
 |      Returns
 |      -------
 |          dict : List of multiaddrs of currently connected peers
 |

 ##########################################################################
 # 返回当前连接的节点的IPFS版本号。  
 |  version(self, **kwargs)
 |      Returns the software version of the currently connected node.
 |      
 |      .. code-block:: python
 |      
 |          >>> c.version()
 |          {'Version': '0.4.3-rc2', 'Repo': '4', 'Commit': '',
 |           'System': 'amd64/linux', 'Golang': 'go1.6.2'}
 |      
 |      Returns
 |      -------
 |          dict : Daemon and system version information
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  __dict__
 |      dictionary for instance variables (if defined)
 |  
 |  __weakref__
 |      list of weak references to the object (if defined)</pre> 
   <div class="ad-wrap"> 
    <div id="blog-title-ad"> 
     <ins class="adsbygoogle"></ins> 
    </div> 
   </div> 
  </div> 
  <p>转载于:https://my.oschina.net/u/2306127/blog/2046243</p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1293902689855414272"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(IPFS的Python API参考手册)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1835514462770130944.htm"
                           title="斤斤计较的婚姻到底有多难?" target="_blank">斤斤计较的婚姻到底有多难?</a>
                        <span class="text-muted">白心之岂必有为</span>

                        <div>很多人私聊我会问到在哪个人群当中斤斤计较的人最多?我都会回答他,一般婚姻出现问题的斤斤计较的人士会非常多,以我多年经验,在婚姻落的一塌糊涂的人当中,斤斤计较的人数占比在20~30%以上,也就是说10个婚姻出现问题的斤斤计较的人有2-3个有多不减。在婚姻出问题当中,有大量的心理不平衡的、尖酸刻薄的怨妇。在婚姻中仅斤斤计较有两种类型:第一种是物质上的,另一种是精神上的。在物质与精神上抠门已经严重的影响</div>
                    </li>
                    <li><a href="/article/1835514464028422144.htm"
                           title="情绪觉察日记第37天" target="_blank">情绪觉察日记第37天</a>
                        <span class="text-muted">露露_e800</span>

                        <div>今天是家庭关系规划师的第二阶最后一天,慧萍老师帮我做了个案,帮我处理了埋在心底好多年的一份恐惧,并给了我深深的力量!这几天出来学习,爸妈过来婆家帮我带小孩,妈妈出于爱帮我收拾东西,并跟我先生和婆婆产生矛盾,妈妈觉得他们没有照顾好我…。今晚回家见到妈妈,我很欣赏她并赞扬她,妈妈说今晚要跟我睡我说好,当我们俩躺在床上准备睡觉的时候,我握着妈妈的手对她说:妈妈这几天辛苦你了,你看你多利害把我们的家收拾得</div>
                    </li>
                    <li><a href="/article/1835514335561084928.htm"
                           title="芦花鞋一四" target="_blank">芦花鞋一四</a>
                        <span class="text-muted">许叶晗</span>

                        <div>又是在一个寒冷的夏日里,青铜和葵花决定今天一起去卖芦花鞋,奶奶亲手给他们做了一碗热乎乎的粥对他们说:“就靠你们两挣生活费了这碗粥赶紧趁热喝了吧!”于是青铜和葵花喝完了奶奶给她们做的粥,就准备去镇上卖卢花鞋,这回青铜和葵花穿着新的芦花鞋来到了镇上。青铜这回看到了很多人都在卖,用手势表达对葵花说:“这回有好多人在抢我们生意呢!我们必须得吆喝起来。”葵花点了点头。可是谁知他们也大声的叫,卖芦花喽!卖芦花</div>
                    </li>
                    <li><a href="/article/1835514307744460800.htm"
                           title="QQ群采集助手,精准引流必备神器" target="_blank">QQ群采集助手,精准引流必备神器</a>
                        <span class="text-muted">2401_87347160</span>
<a class="tag" taget="_blank" href="/search/%E5%85%B6%E4%BB%96/1.htm">其他</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a>
                        <div>功能概述微信群查找与筛选工具是一款专为微信用户设计的辅助工具,它通过关键词搜索功能,帮助用户快速找到相关的微信群,并提供筛选是否需要验证的群组的功能。主要功能关键词搜索:用户可以输入关键词,工具将自动查找包含该关键词的微信群。筛选功能:工具提供筛选机制,用户可以选择是否只显示需要验证或不需要验证的群组。精准引流:通过上述功能,用户可以更精准地找到目标群组,进行有效的引流操作。3.设备需求该工具可以</div>
                    </li>
                    <li><a href="/article/1835514207114719232.htm"
                           title="关于沟通这件事,项目经理不需要每次都面对面进行" target="_blank">关于沟通这件事,项目经理不需要每次都面对面进行</a>
                        <span class="text-muted">流程大师兄</span>

                        <div>很多项目经理都会遇到这样的问题,项目中由于事情太多,根本没有足够的时间去召开会议,那在这种情况下如何去有效地管理项目中的利益相关者?当然,不建议电子邮件也不需要开会的话,建议可以采取下面几种方式来形成有效的沟通,这几种方式可以帮助你努力的通过各种办法来保持和各方面的联系。项目经理首先要问自己几个问题,项目中哪些利益相关者是必须要进行沟通的?可以列出项目中所有的利益相关者清单,同时也整理出项目中哪些</div>
                    </li>
                    <li><a href="/article/1835513803861749760.htm"
                           title="机器学习与深度学习间关系与区别" target="_blank">机器学习与深度学习间关系与区别</a>
                        <span class="text-muted">ℒℴѵℯ心·动ꦿ໊ོ꫞</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>一、机器学习概述定义机器学习(MachineLearning,ML)是一种通过数据驱动的方法,利用统计学和计算算法来训练模型,使计算机能够从数据中学习并自动进行预测或决策。机器学习通过分析大量数据样本,识别其中的模式和规律,从而对新的数据进行判断。其核心在于通过训练过程,让模型不断优化和提升其预测准确性。主要类型1.监督学习(SupervisedLearning)监督学习是指在训练数据集中包含输入</div>
                    </li>
                    <li><a href="/article/1835513701143244800.htm"
                           title="铭刻于星(四十二)" target="_blank">铭刻于星(四十二)</a>
                        <span class="text-muted">随风至</span>

                        <div>69夜晚,绍敏同学做完功课后,看了眼房外,没听到动静才敢从书包的夹层里拿出那个心形纸团。折痕压得很深,都有些旧了,想来是已经写好很久了。绍敏同学慢慢地、轻轻地捏开折叠处,待到全部拆开后,又反复抚平纸张,然后仔细地一字字默看。只是开头的三个字是第一次看到,让她心漏跳了几拍。“亲爱的绍敏:从四年级的时候,我就喜欢你了,但是我一直不敢说,怕影响你学习。六年级的时候听说有人跟你表白,你接受了,我很难过,但</div>
                    </li>
                    <li><a href="/article/1835513570171908096.htm"
                           title="底层逆袭到底有多难,不甘平凡的你准备好了吗?让吴起给你说说" target="_blank">底层逆袭到底有多难,不甘平凡的你准备好了吗?让吴起给你说说</a>
                        <span class="text-muted">造命者说</span>

                        <div>底层逆袭到底有多难,不甘平凡的你准备好了吗?让吴起给你说说我叫吴起,生于公元前440年的战国初期,正是群雄并起、天下纷争不断的时候。后人说我是军事家、政治家、改革家,是兵家代表人物。评价我一生历仕鲁、魏、楚三国,通晓兵家、法家、儒家三家思想,在内政军事上都有极高的成就。周安王二十一年(公元前381年),因变法得罪守旧贵族,被人乱箭射死。我出生在卫国一个“家累万金”的富有家庭,从年轻时候起就不甘平凡</div>
                    </li>
                    <li><a href="/article/1835513571501502464.htm"
                           title="2020-01-25" target="_blank">2020-01-25</a>
                        <span class="text-muted">晴岚85</span>

                        <div>郑海燕坚持分享590天2020.1.24在生活中只存在两个问题。一个问题是:你知道想要达成的目标是什么,但却不知道如何才能达成;另一个问题是:你不知道你的目标是什么。前一个是行动的问题,后一个是结果的问题。通过制定具体的下一步行动,可以解决不知道如何开始行动的问题。而通过去想象结果,对结果做预估,可以解决找不着目标的问题。对于所有吸引我们注意力,想要完成的任务,你可以先想象一下,预期的结果究竟是什</div>
                    </li>
                    <li><a href="/article/1835513568917811200.htm"
                           title="随笔 | 仙一般的灵气" target="_blank">随笔 | 仙一般的灵气</a>
                        <span class="text-muted">海思沧海</span>

                        <div>仙岛今天,我看了你全部,似乎已经进入你的世界我不知道,这是否是梦幻,还是你仙一般的灵气吸引了我也许每一个人都要有一份属于自己的追求,这样才能够符合人生的梦想,生活才能够充满着阳光与快乐我不知道,我为什么会这样的感叹,是在感叹自己的人生,还是感叹自己一直没有孜孜不倦的追求只感觉虚度了光阴,每天活在自己的梦中,活在一个不真实的世界是在逃避自己,还是在逃避周围的一切有时候我嘲笑自己,嘲笑自己如此的虚无,</div>
                    </li>
                    <li><a href="/article/1835513567663714304.htm"
                           title="想家" target="_blank">想家</a>
                        <span class="text-muted">爆米花机</span>

                        <div>也许不同于大家对家乡的思念,我对家乡甚至是疯狂的不舍。还未踏出车站就感觉到幸福,我享受这里的夕阳、这里的浓烈柴火味、这里每一口家常菜。我是宅女,我贪恋家的安逸。刚刚踏出大学校门,初出茅庐,无法适应每年只能国庆和春节回家。我焦虑、失眠、无端发脾气,是无法适应工作的节奏,是无法接受我将一步步离开家乡的事实。我不想承认自己胸无大志,选择再次踏上征程。图片发自App</div>
                    </li>
                    <li><a href="/article/1835513551624695808.htm"
                           title="【iOS】MVC设计模式" target="_blank">【iOS】MVC设计模式</a>
                        <span class="text-muted">Magnetic_h</span>
<a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/objective-c/1.htm">objective-c</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a>
                        <div>MVC前言如何设计一个程序的结构,这是一门专门的学问,叫做"架构模式"(architecturalpattern),属于编程的方法论。MVC模式就是架构模式的一种。它是Apple官方推荐的App开发架构,也是一般开发者最先遇到、最经典的架构。MVC各层controller层Controller/ViewController/VC(控制器)负责协调Model和View,处理大部分逻辑它将数据从Mod</div>
                    </li>
                    <li><a href="/article/1835513551142350848.htm"
                           title="OC语言多界面传值五大方式" target="_blank">OC语言多界面传值五大方式</a>
                        <span class="text-muted">Magnetic_h</span>
<a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/objective-c/1.htm">objective-c</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>前言在完成暑假仿写项目时,遇到了许多需要用到多界面传值的地方,这篇博客来总结一下比较常用的五种多界面传值的方式。属性传值属性传值一般用前一个界面向后一个界面传值,简单地说就是通过访问后一个视图控制器的属性来为它赋值,通过这个属性来做到从前一个界面向后一个界面传值。首先在后一个界面中定义属性@interfaceBViewController:UIViewController@propertyNSSt</div>
                    </li>
                    <li><a href="/article/1835513440525971456.htm"
                           title="一百九十四章. 自相矛盾" target="_blank">一百九十四章. 自相矛盾</a>
                        <span class="text-muted">巨木擎天</span>

                        <div>唉!就这么一夜,林子感觉就像过了很多天似的,先是回了阳间家里,遇到了那么多不可思议的事情儿。特别是小伙伴们,第二次与自己见面时,僵硬的表情和恐怖的气氛,让自己如坐针毡,打从心眼里难受!还有东子,他现在还好吗?有没有被人欺负?护城河里的小鱼小虾们,还都在吗?水不会真的干枯了吧?那对相亲相爱漂亮的太平鸟儿,还好吧!春天了,到了做窝、下蛋、喂养小鸟宝宝的时候了,希望它们都能够平安啊!虽然没有看见家人,也</div>
                    </li>
                    <li><a href="/article/1835513424734416896.htm"
                           title="UI学习——cell的复用和自定义cell" target="_blank">UI学习——cell的复用和自定义cell</a>
                        <span class="text-muted">Magnetic_h</span>
<a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>目录cell的复用手动(非注册)自动(注册)自定义cellcell的复用在iOS开发中,单元格复用是一种提高表格(UITableView)和集合视图(UICollectionView)滚动性能的技术。当一个UITableViewCell或UICollectionViewCell首次需要显示时,如果没有可复用的单元格,则视图会创建一个新的单元格。一旦这个单元格滚动出屏幕,它就不会被销毁。相反,它被添</div>
                    </li>
                    <li><a href="/article/1835512920797179904.htm"
                           title="element实现动态路由+面包屑" target="_blank">element实现动态路由+面包屑</a>
                        <span class="text-muted">软件技术NINI</span>
<a class="tag" taget="_blank" href="/search/vue%E6%A1%88%E4%BE%8B/1.htm">vue案例</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>el-breadcrumb是ElementUI组件库中的一个面包屑导航组件,它用于显示当前页面的路径,帮助用户快速理解和导航到应用的各个部分。在Vue.js项目中,如果你已经安装了ElementUI,就可以很方便地使用el-breadcrumb组件。以下是一个基本的使用示例:安装ElementUI(如果你还没有安装的话):你可以通过npm或yarn来安装ElementUI。bash复制代码npmi</div>
                    </li>
                    <li><a href="/article/1835512809883004928.htm"
                           title="10月|愿你的青春不负梦想-读书笔记-01" target="_blank">10月|愿你的青春不负梦想-读书笔记-01</a>
                        <span class="text-muted">Tracy的小书斋</span>

                        <div>本书的作者是俞敏洪,大家都很熟悉他了吧。俞敏洪老师是我行业的领头羊吧,也是我事业上的偶像。本日摘录他书中第一章中的金句:『一个人如果什么目标都没有,就会浑浑噩噩,感觉生命中缺少能量。能给我们能量的,是对未来的期待。第一件事,我始终为了进步而努力。与其追寻全世界的骏马,不如种植丰美的草原,到时骏马自然会来。第二件事,我始终有阶段性的目标。什么东西能给我能量?答案是对未来的期待。』读到这里的时候,我便</div>
                    </li>
                    <li><a href="/article/1835512542735200256.htm"
                           title="C语言宏函数" target="_blank">C语言宏函数</a>
                        <span class="text-muted">南林yan</span>
<a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80/1.htm">C语言</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>一、什么是宏函数?通过宏定义的函数是宏函数。如下,编译器在预处理阶段会将Add(x,y)替换为((x)*(y))#defineAdd(x,y)((x)*(y))#defineAdd(x,y)((x)*(y))intmain(){inta=10;intb=20;intd=10;intc=Add(a+d,b)*2;cout<<c<<endl;//800return0;}二、为什么要使用宏函数使用宏函数</div>
                    </li>
                    <li><a href="/article/1835512305320816640.htm"
                           title="地推话术,如何应对地推过程中家长的拒绝" target="_blank">地推话术,如何应对地推过程中家长的拒绝</a>
                        <span class="text-muted">校师学</span>

                        <div>相信校长们在做地推的时候经常遇到这种情况:市场专员反馈家长不接单,咨询师反馈难以邀约这些家长上门,校区地推疲软,招生难。为什么?仅从地推层面分析,一方面因为家长受到的信息轰炸越来越多,对信息越来越“免疫”;而另一方面地推人员的专业能力和营销话术没有提高,无法应对家长的拒绝,对有意向的家长也不知如何跟进,眼睁睁看着家长走远;对于家长的疑问,更不知道如何有技巧地回答,机会白白流失。由于回答没技巧和专业</div>
                    </li>
                    <li><a href="/article/1835512178023690240.htm"
                           title="谢谢你们,爱你们!" target="_blank">谢谢你们,爱你们!</a>
                        <span class="text-muted">鹿游儿</span>

                        <div>昨天家人去泡温泉,二个孩子也带着去,出发前一晚,匆匆下班,赶回家和孩子一起收拾。饭后,我拿出笔和本子(上次去澳门时做手帐的本子)写下了1\2\3\4\5\6\7\8\9,让后让小壹去思考,带什么出发去旅游呢?她在对应的数字旁边画上了,泳衣、泳圈、肖恩、内衣内裤、tapuy、拖鞋……画完后,就让她自己对着这个本子,将要带的,一一带上,没想到这次带的书还是这本《便便工厂》(晚上姑婆发照片过来,妹妹累得</div>
                    </li>
                    <li><a href="/article/1835511911769272320.htm"
                           title="C语言如何定义宏函数?" target="_blank">C语言如何定义宏函数?</a>
                        <span class="text-muted">小九格物</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>在C语言中,宏函数是通过预处理器定义的,它在编译之前替换代码中的宏调用。宏函数可以模拟函数的行为,但它们不是真正的函数,因为它们在编译时不会进行类型检查,也不会分配存储空间。宏函数的定义通常使用#define指令,后面跟着宏的名称和参数列表,以及宏展开后的代码。宏函数的定义方式:1.基本宏函数:这是最简单的宏函数形式,它直接定义一个表达式。#defineSQUARE(x)((x)*(x))2.带参</div>
                    </li>
                    <li><a href="/article/1835511912192897024.htm"
                           title="微服务下功能权限与数据权限的设计与实现" target="_blank">微服务下功能权限与数据权限的设计与实现</a>
                        <span class="text-muted">nbsaas-boot</span>
<a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>在微服务架构下,系统的功能权限和数据权限控制显得尤为重要。随着系统规模的扩大和微服务数量的增加,如何保证不同用户和服务之间的访问权限准确、细粒度地控制,成为设计安全策略的关键。本文将讨论如何在微服务体系中设计和实现功能权限与数据权限控制。1.功能权限与数据权限的定义功能权限:指用户或系统角色对特定功能的访问权限。通常是某个用户角色能否执行某个操作,比如查看订单、创建订单、修改用户资料等。数据权限:</div>
                    </li>
                    <li><a href="/article/1835511912843014144.htm"
                           title="理解Gunicorn:Python WSGI服务器的基石" target="_blank">理解Gunicorn:Python WSGI服务器的基石</a>
                        <span class="text-muted">范范0825</span>
<a class="tag" taget="_blank" href="/search/ipython/1.htm">ipython</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>理解Gunicorn:PythonWSGI服务器的基石介绍Gunicorn,全称GreenUnicorn,是一个为PythonWSGI(WebServerGatewayInterface)应用设计的高效、轻量级HTTP服务器。作为PythonWeb应用部署的常用工具,Gunicorn以其高性能和易用性著称。本文将介绍Gunicorn的基本概念、安装和配置,帮助初学者快速上手。1.什么是Gunico</div>
                    </li>
                    <li><a href="/article/1835511669476913152.htm"
                           title="小丽成长记(四十三)" target="_blank">小丽成长记(四十三)</a>
                        <span class="text-muted">玲玲54321</span>

                        <div>小丽发现,即使她好不容易调整好自己的心态下一秒总会有不确定的伤脑筋的事出现,一个接一个的问题,人生就没有停下的时候,小问题不断出现。不过她今天看的书,她接受了人生就是不确定的,厉害的人就是不断创造确定性,在Ta的领域比别人多的确定性就能让自己脱颖而出,显示价值从而获得的比别人多的利益。正是这样的原因,因为从前修炼自己太少,使得她现在在人生道路上打怪起来困难重重,她似乎永远摆脱不了那种无力感,有种习</div>
                    </li>
                    <li><a href="/article/1835511542284644352.htm"
                           title="学点心理知识,呵护孩子健康" target="_blank">学点心理知识,呵护孩子健康</a>
                        <span class="text-muted">静候花开_7090</span>

                        <div>昨天听了华中师范大学教育管理学系副教授张玲老师的《哪里才是学生心理健康的最后庇护所,超越教育与技术的思考》的讲座。今天又重新学习了一遍,收获匪浅。张玲博士也注意到了当今社会上的孩子由于心理问题导致的自残、自杀及伤害他人等恶性事件。她向我们普及了一个重要的命题,她说心理健康的一些基本命题,我们与我们通常的一些教育命题是不同的,她还举了几个例子,让我们明白我们原来以为的健康并非心理学上的健康。比如如果</div>
                    </li>
                    <li><a href="/article/1835511163450912768.htm"
                           title="2021年12月19日,春蕾教育集团团建活动感受——黄晓丹" target="_blank">2021年12月19日,春蕾教育集团团建活动感受——黄晓丹</a>
                        <span class="text-muted">黄错错加油</span>

                        <div>感受:1.从陌生到熟悉的过程。游戏环节让我们在轻松的氛围中得到了锻炼,也增长了不少知识。2.游戏过程中,我们贡献的是个人力量,展现的是团队的力量。它磨合的往往不止是工作的熟悉,更是观念上契合度的贴近。3.这和工作是一样的道理。在各自的岗位上,每个人摆正自己的位置、各司其职充分发挥才能,并团结一致劲往一处使,才能实现最大的成功。新知:1.团队精神需要不断地创新。过去,人们把创新看作是冒风险,现在人们</div>
                    </li>
                    <li><a href="/article/1835511036317364224.htm"
                           title="Cell Insight | 单细胞测序技术又一新发现,可用于HIV-1和Mtb共感染个体诊断" target="_blank">Cell Insight | 单细胞测序技术又一新发现,可用于HIV-1和Mtb共感染个体诊断</a>
                        <span class="text-muted">尐尐呅</span>

                        <div>结核病是艾滋病合并其他疾病中导致患者死亡的主要原因。其中结核病由结核分枝杆菌(Mycobacteriumtuberculosis,Mtb)感染引起,获得性免疫缺陷综合症(艾滋病)由人免疫缺陷病毒(Humanimmunodeficiencyvirustype1,HIV-1)感染引起。国家感染性疾病临床医学研究中心/深圳市第三人民医院张国良团队携手深圳华大生命科学研究院吴靓团队,共同研究得出单细胞测序</div>
                    </li>
                    <li><a href="/article/1835511030260789248.htm"
                           title="c++ 的iostream 和 c++的stdio的区别和联系" target="_blank">c++ 的iostream 和 c++的stdio的区别和联系</a>
                        <span class="text-muted">黄卷青灯77</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/iostream/1.htm">iostream</a><a class="tag" taget="_blank" href="/search/stdio/1.htm">stdio</a>
                        <div>在C++中,iostream和C语言的stdio.h都是用于处理输入输出的库,但它们在设计、用法和功能上有许多不同。以下是两者的区别和联系:区别1.编程风格iostream(C++风格):C++标准库中的输入输出流类库,支持面向对象的输入输出操作。典型用法是cin(输入)和cout(输出),使用>操作符来处理数据。更加类型安全,支持用户自定义类型的输入输出。#includeintmain(){in</div>
                    </li>
                    <li><a href="/article/1835510909070569472.htm"
                           title="瑶池防线" target="_blank">瑶池防线</a>
                        <span class="text-muted">谜影梦蝶</span>

                        <div>冥华虽然逃过了影梦的军队,但他是一个忠臣,他选择上报战况。败给影梦后成逃兵,高层亡尔还活着,七重天失守......随便一条,即可处死冥华。冥华自然是知道以仙界高层的习性此信一发自己必死无疑,但他还选择上报实情,因为责任。同样此信送到仙宫后,知道此事的人,大多数人都认定冥华要完了,所以上到仙界高层,下到扫大街的,包括冥华自己,全都准备好迎接冥华之死。如果仙界现在还属于两方之争的话,冥华必死无疑。然而</div>
                    </li>
                    <li><a href="/article/1835510656011431936.htm"
                           title="爬山后遗症" target="_blank">爬山后遗症</a>
                        <span class="text-muted">璃绛</span>

                        <div>爬山,攀登,一步一步走向制高点,是一种挑战。成功抵达是一种无法言语的快乐,在山顶吹吹风,看看风景,这是从未有过的体验。然而,爬山一时爽,下山腿打颤,颠簸的路,一路向下走,腿部力量不够,走起来抖到不行,停不下来了!第二天必定腿疼,浑身酸痛,坐立难安!</div>
                    </li>
                                <li><a href="/article/84.htm"
                                       title="继之前的线程循环加到窗口中运行" target="_blank">继之前的线程循环加到窗口中运行</a>
                                    <span class="text-muted">3213213333332132</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/JFrame/1.htm">JFrame</a><a class="tag" taget="_blank" href="/search/JPanel/1.htm">JPanel</a>
                                    <div>之前写了有关java线程的循环执行和结束,因为想制作成exe文件,想把执行的效果加到窗口上,所以就结合了JFrame和JPanel写了这个程序,这里直接贴出代码,在窗口上运行的效果下面有附图。 
 

package thread;

import java.awt.Graphics;
import java.text.SimpleDateFormat;
import java.util</div>
                                </li>
                                <li><a href="/article/211.htm"
                                       title="linux 常用命令" target="_blank">linux 常用命令</a>
                                    <span class="text-muted">BlueSkator</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%91%BD%E4%BB%A4/1.htm">命令</a>
                                    <div>1.grep 
相信这个命令可以说是大家最常用的命令之一了。尤其是查询生产环境的日志,这个命令绝对是必不可少的。 
但之前总是习惯于使用 (grep -n 关键字 文件名 )查出关键字以及该关键字所在的行数,然后再用 (sed -n  '100,200p' 文件名),去查出该关键字之后的日志内容。 
但其实还有更简便的办法,就是用(grep  -B n、-A n、-C n 关键</div>
                                </li>
                                <li><a href="/article/338.htm"
                                       title="php heredoc原文档和nowdoc语法" target="_blank">php heredoc原文档和nowdoc语法</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/heredoc/1.htm">heredoc</a><a class="tag" taget="_blank" href="/search/nowdoc/1.htm">nowdoc</a>
                                    <div><!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Current To-Do List</title>
</head>
<body>
<?</div>
                                </li>
                                <li><a href="/article/465.htm"
                                       title="overflow的属性" target="_blank">overflow的属性</a>
                                    <span class="text-muted">周华华</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a>
                                    <div><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml&q</div>
                                </li>
                                <li><a href="/article/592.htm"
                                       title="《我所了解的Java》——总体目录" target="_blank">《我所了解的Java》——总体目录</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>        准备用一年左右时间写一个系列的文章《我所了解的Java》,目录及内容会不断完善及调整。 
        在编写相关内容时难免出现笔误、代码无法执行、名词理解错误等,请大家及时指出,我会第一时间更正。 
   &n</div>
                                </li>
                                <li><a href="/article/719.htm"
                                       title="[简单]docx4j常用方法小结" target="_blank">[简单]docx4j常用方法小结</a>
                                    <span class="text-muted">53873039oycg</span>
<a class="tag" taget="_blank" href="/search/docx/1.htm">docx</a>
                                    <div>        本代码基于docx4j-3.2.0,在office word 2007上测试通过。代码如下: 
         
import java.io.File;
import java.io.FileInputStream;
import ja</div>
                                </li>
                                <li><a href="/article/846.htm"
                                       title="Spring配置学习" target="_blank">Spring配置学习</a>
                                    <span class="text-muted">云端月影</span>
<a class="tag" taget="_blank" href="/search/spring%E9%85%8D%E7%BD%AE/1.htm">spring配置</a>
                                    <div> 
首先来看一个标准的Spring配置文件 applicationContext.xml 
 
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
 xmlns:xsi=&q</div>
                                </li>
                                <li><a href="/article/973.htm"
                                       title="Java新手入门的30个基本概念三" target="_blank">Java新手入门的30个基本概念三</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%96%B0%E6%89%8B/1.htm">新手</a><a class="tag" taget="_blank" href="/search/java+%E5%85%A5%E9%97%A8/1.htm">java 入门</a>
                                    <div>17.Java中的每一个类都是从Object类扩展而来的。  18.object类中的equal和toString方法。  equal用于测试一个对象是否同另一个对象相等。  toString返回一个代表该对象的字符串,几乎每一个类都会重载该方法,以便返回当前状态的正确表示.(toString 方法是一个很重要的方法)   19.通用编程:任何类类型的所有值都可以同object类性的变量来代替。 </div>
                                </li>
                                <li><a href="/article/1100.htm"
                                       title="《2008 IBM Rational 软件开发高峰论坛会议》小记" target="_blank">《2008 IBM Rational 软件开发高峰论坛会议》小记</a>
                                    <span class="text-muted">antonyup_2006</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a><a class="tag" taget="_blank" href="/search/%E6%95%8F%E6%8D%B7%E5%BC%80%E5%8F%91/1.htm">敏捷开发</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86/1.htm">项目管理</a><a class="tag" taget="_blank" href="/search/IBM/1.htm">IBM</a><a class="tag" taget="_blank" href="/search/%E6%B4%BB%E5%8A%A8/1.htm">活动</a>
                                    <div>我一直想写些总结,用于交流和备忘,然都没提笔,今以一篇参加活动的感受小记开个头,呵呵! 
 
其实参加《2008 IBM Rational 软件开发高峰论坛会议》是9月4号,那天刚好调休.但接着项目颇为忙,所以今天在中秋佳节的假期里整理了下. 
 
参加这次活动是一个朋友给的一个邀请书,才知道有这样的一个活动,虽然现在项目暂时没用到IBM的解决方案,但觉的参与这样一个活动可以拓宽下视野和相关知识.</div>
                                </li>
                                <li><a href="/article/1227.htm"
                                       title="PL/SQL的过程编程,异常,声明变量,PL/SQL块" target="_blank">PL/SQL的过程编程,异常,声明变量,PL/SQL块</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/PL%2FSQL%E7%9A%84%E8%BF%87%E7%A8%8B%E7%BC%96%E7%A8%8B/1.htm">PL/SQL的过程编程</a><a class="tag" taget="_blank" href="/search/%E5%BC%82%E5%B8%B8/1.htm">异常</a><a class="tag" taget="_blank" href="/search/PL%2FSQL%E5%9D%97/1.htm">PL/SQL块</a><a class="tag" taget="_blank" href="/search/%E5%A3%B0%E6%98%8E%E5%8F%98%E9%87%8F/1.htm">声明变量</a>
                                    <div>PL/SQL; 
   
   过程;

    符号;

     变量;

     PL/SQL块;

     输出;

     异常;
 
  
  
PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言PL/SQL 是对 SQL 的扩展,sql的执行时每次都要写操作</div>
                                </li>
                                <li><a href="/article/1354.htm"
                                       title="Mockito(三)--完整功能介绍" target="_blank">Mockito(三)--完整功能介绍</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90/1.htm">持续集成</a><a class="tag" taget="_blank" href="/search/mockito/1.htm">mockito</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a>
                                    <div>        mockito官网:http://code.google.com/p/mockito/,打开documentation可以看到官方最新的文档资料。 
一.使用mockito验证行为 
//首先要import Mockito
import static org.mockito.Mockito.*;

//mo</div>
                                </li>
                                <li><a href="/article/1481.htm"
                                       title="精通Oracle10编程SQL(8)使用复合数据类型" target="_blank">精通Oracle10编程SQL(8)使用复合数据类型</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a>
                                    <div>/*
 *使用复合数据类型
 */

--PL/SQL记录
--定义PL/SQL记录
--自定义PL/SQL记录
DECLARE
  TYPE emp_record_type IS RECORD(
     name emp.ename%TYPE,
     salary emp.sal%TYPE,
     dno emp.deptno%TYPE
  );
  emp_</div>
                                </li>
                                <li><a href="/article/1608.htm"
                                       title="【Linux常用命令一】grep命令" target="_blank">【Linux常用命令一】grep命令</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Linux%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/1.htm">Linux常用命令</a>
                                    <div>grep命令格式 
  
grep [option] pattern [file-list] 
  
  
grep命令用于在指定的文件(一个或者多个,file-list)中查找包含模式串(pattern)的行,[option]用于控制grep命令的查找方式。 
  
pattern可以是普通字符串,也可以是正则表达式,当查找的字符串包含正则表达式字符或者特</div>
                                </li>
                                <li><a href="/article/1735.htm"
                                       title="mybatis3入门学习笔记" target="_blank">mybatis3入门学习笔记</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a><a class="tag" taget="_blank" href="/search/qq/1.htm">qq</a><a class="tag" taget="_blank" href="/search/jdbc/1.htm">jdbc</a><a class="tag" taget="_blank" href="/search/%E9%85%8D%E7%BD%AE%E7%AE%A1%E7%90%86/1.htm">配置管理</a>
                                    <div>MyBatis 的前身就是iBatis,是一个数据持久层(ORM)框架。  MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis对JDBC进行了一次很浅的封装。 
  
以前也学过iBatis,因为MyBatis是iBatis的升级版本,最初以为改动应该不大,实际结果是MyBatis对配置文件进行了一些大的改动,使整个框架更加方便人性化。</div>
                                </li>
                                <li><a href="/article/1862.htm"
                                       title="Linux 命令神器:lsof 入门" target="_blank">Linux 命令神器:lsof 入门</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/lsof/1.htm">lsof</a>
                                    <div>       
lsof是系统管理/安全的尤伯工具。我大多数时候用它来从系统获得与网络连接相关的信息,但那只是这个强大而又鲜为人知的应用的第一步。将这个工具称之为lsof真实名副其实,因为它是指“列出打开文件(lists openfiles)”。而有一点要切记,在Unix中一切(包括网络套接口)都是文件。 
有趣的是,lsof也是有着最多</div>
                                </li>
                                <li><a href="/article/1989.htm"
                                       title="java实现两个大数相加,可能存在溢出。" target="_blank">java实现两个大数相加,可能存在溢出。</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java%E5%AE%9E%E7%8E%B0/1.htm">java实现</a>
                                    <div>
import java.math.BigInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class BigIntegerAddition {

	/**
	 * 题目:java实现两个大数相加,可能存在溢出。
	 * 如123456789 + 987654321</div>
                                </li>
                                <li><a href="/article/2116.htm"
                                       title="Kettle学习资料分享,附大神用Kettle的一套流程完成对整个数据库迁移方法" target="_blank">Kettle学习资料分享,附大神用Kettle的一套流程完成对整个数据库迁移方法</a>
                                    <span class="text-muted">Kai_Ge</span>
<a class="tag" taget="_blank" href="/search/Kettle/1.htm">Kettle</a>
                                    <div>Kettle学习资料分享 
  
Kettle 3.2 使用说明书 
目录 
概述..........................................................................................................................................7 
1.Kettle 资源库管</div>
                                </li>
                                <li><a href="/article/2243.htm"
                                       title="[货币与金融]钢之炼金术士" target="_blank">[货币与金融]钢之炼金术士</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E9%87%91%E8%9E%8D/1.htm">金融</a>
                                    <div> 
 
       自古以来,都有一些人在从事炼金术的工作.........但是很少有成功的 
 
       那么随着人类在理论物理和工程物理上面取得的一些突破性进展...... 
 
       炼金术这个古老</div>
                                </li>
                                <li><a href="/article/2370.htm"
                                       title="Toast原来也可以多样化" target="_blank">Toast原来也可以多样化</a>
                                    <span class="text-muted">dai_lm</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/toast/1.htm">toast</a>
                                    <div>Style 1: 默认 
 

Toast def = Toast.makeText(this, "default", Toast.LENGTH_SHORT);
def.show();
 
Style 2: 顶部显示 
 

Toast top = Toast.makeText(this, "top", Toast.LENGTH_SHORT);
t</div>
                                </li>
                                <li><a href="/article/2497.htm"
                                       title="java数据计算的几种解决方法3" target="_blank">java数据计算的几种解决方法3</a>
                                    <span class="text-muted">datamachine</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a><a class="tag" taget="_blank" href="/search/r-langue/1.htm">r-langue</a><a class="tag" taget="_blank" href="/search/r/1.htm">r</a>
                                    <div>4、iBatis 
    简单敏捷因此强大的数据计算层。和Hibernate不同,它鼓励写SQL,所以学习成本最低。同时它用最小的代价实现了计算脚本和JAVA代码的解耦,只用20%的代价就实现了hibernate 80%的功能,没实现的20%是计算脚本和数据库的解耦。 
    复杂计算环境是它的弱项,比如:分布式计算、复杂计算、非数据</div>
                                </li>
                                <li><a href="/article/2624.htm"
                                       title="向网页中插入透明Flash的方法和技巧" target="_blank">向网页中插入透明Flash的方法和技巧</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/Flash/1.htm">Flash</a>
                                    <div>将 
Flash 作品插入网页的时候,我们有时候会需要将它设为透明,有时候我们需要在Flash的背面插入一些漂亮的图片,搭配出漂亮的效果……下面我们介绍一些将Flash插入网页中的一些透明的设置技巧。  
  一、Swf透明、无坐标控制  首先教大家最简单的插入Flash的代码,透明,无坐标控制:   注意wmode="transparent"是控制Flash是否透明</div>
                                </li>
                                <li><a href="/article/2751.htm"
                                       title="ios UICollectionView的使用" target="_blank">ios UICollectionView的使用</a>
                                    <span class="text-muted">dcj3sjt126com</span>

                                    <div>UICollectionView的使用有两种方法,一种是继承UICollectionViewController,这个Controller会自带一个UICollectionView;另外一种是作为一个视图放在普通的UIViewController里面。 
个人更喜欢第二种。下面采用第二种方式简单介绍一下UICollectionView的使用。 
1.UIViewController实现委托,代码如</div>
                                </li>
                                <li><a href="/article/2878.htm"
                                       title="Eos平台java公共逻辑" target="_blank">Eos平台java公共逻辑</a>
                                    <span class="text-muted">蕃薯耀</span>
<a class="tag" taget="_blank" href="/search/Eos%E5%B9%B3%E5%8F%B0java%E5%85%AC%E5%85%B1%E9%80%BB%E8%BE%91/1.htm">Eos平台java公共逻辑</a><a class="tag" taget="_blank" href="/search/Eos%E5%B9%B3%E5%8F%B0/1.htm">Eos平台</a><a class="tag" taget="_blank" href="/search/java%E5%85%AC%E5%85%B1%E9%80%BB%E8%BE%91/1.htm">java公共逻辑</a>
                                    <div> Eos平台java公共逻辑 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
蕃薯耀 2015年6月1日 17:20:4</div>
                                </li>
                                <li><a href="/article/3005.htm"
                                       title="SpringMVC4零配置--Web上下文配置【MvcConfig】" target="_blank">SpringMVC4零配置--Web上下文配置【MvcConfig】</a>
                                    <span class="text-muted">hanqunfeng</span>
<a class="tag" taget="_blank" href="/search/springmvc4/1.htm">springmvc4</a>
                                    <div>与SpringSecurity的配置类似,spring同样为我们提供了一个实现类WebMvcConfigurationSupport和一个注解@EnableWebMvc以帮助我们减少bean的声明。 
  
applicationContext-MvcConfig.xml 
<!-- 启用注解,并定义组件查找规则 ,mvc层只负责扫描@Controller -->
	<</div>
                                </li>
                                <li><a href="/article/3132.htm"
                                       title="解决ie和其他浏览器poi下载excel文件名乱码" target="_blank">解决ie和其他浏览器poi下载excel文件名乱码</a>
                                    <span class="text-muted">jackyrong</span>
<a class="tag" taget="_blank" href="/search/Excel/1.htm">Excel</a>
                                    <div>   使用poi,做传统的excel导出,然后想在浏览器中,让用户选择另存为,保存用户下载的xls文件,这个时候,可能的是在ie下出现乱码(ie,9,10,11),但在firefox,chrome下没乱码, 
 
因此必须综合判断,编写一个工具类: 
 
 
     

/**
     * 
     * @Title: pro</div>
                                </li>
                                <li><a href="/article/3259.htm"
                                       title="挥洒泪水的青春" target="_blank">挥洒泪水的青春</a>
                                    <span class="text-muted">lampcy</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB/1.htm">生活</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a>
                                    <div>2015年2月28日,我辞职了,离开了相处一年的触控,转过身--挥洒掉泪水,毅然来到了兄弟连,背负着许多的不解、质疑——”你一个零基础、脑子又不聪明的人,还敢跨行业,选择Unity3D?“,”真是不自量力••••••“,”真是初生牛犊不怕虎•••••“,••••••我只是淡淡一笑,拎着行李----坐上了通向挥洒泪水的青春之地——兄弟连! 
这就是我青春的分割线,不后悔,只会去用泪水浇灌——已经来到</div>
                                </li>
                                <li><a href="/article/3386.htm"
                                       title="稳增长之中国股市两点意见-----严控做空,建立涨跌停版停牌重组机制" target="_blank">稳增长之中国股市两点意见-----严控做空,建立涨跌停版停牌重组机制</a>
                                    <span class="text-muted">nannan408</span>

                                    <div>   对于股市,我们国家的监管还是有点拼的,但始终拼不过飞流直下的恐慌,为什么呢? 
   笔者首先支持股市的监管。对于股市越管越荡的现象,笔者认为首先是做空力量超过了股市自身的升力,并且对于跌停停牌重组的快速反应还没建立好,上市公司对于股价下跌没有很好的利好支撑。 
   我们来看美国和香港是怎么应对股灾的。美国是靠禁止重要股票做空,在</div>
                                </li>
                                <li><a href="/article/3513.htm"
                                       title="动态设置iframe高度(iframe高度自适应)" target="_blank">动态设置iframe高度(iframe高度自适应)</a>
                                    <span class="text-muted">Rainbow702</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/iframe/1.htm">iframe</a><a class="tag" taget="_blank" href="/search/contentDocument/1.htm">contentDocument</a><a class="tag" taget="_blank" href="/search/%E9%AB%98%E5%BA%A6%E8%87%AA%E9%80%82%E5%BA%94/1.htm">高度自适应</a><a class="tag" taget="_blank" href="/search/%E5%B1%80%E9%83%A8%E5%88%B7%E6%96%B0/1.htm">局部刷新</a>
                                    <div>如果需要对画面中的部分区域作局部刷新,大家可能都会想到使用ajax。 
但有些情况下,须使用在页面中嵌入一个iframe来作局部刷新。 
对于使用iframe的情况,发现有一个问题,就是iframe中的页面的高度可能会很高,但是外面页面并不会被iframe内部页面给撑开,如下面的结构: 
<div id="content">
    <div id=&quo</div>
                                </li>
                                <li><a href="/article/3640.htm"
                                       title="用Rapael做图表" target="_blank">用Rapael做图表</a>
                                    <span class="text-muted">tntxia</span>
<a class="tag" taget="_blank" href="/search/rap/1.htm">rap</a>
                                    <div>function drawReport(paper,attr,data){ 
     
    var width = attr.width; 
    var height = attr.height; 
     
    var max = 0; 
  &nbs</div>
                                </li>
                                <li><a href="/article/3767.htm"
                                       title="HTML5 bootstrap2网页兼容(支持IE10以下)" target="_blank">HTML5 bootstrap2网页兼容(支持IE10以下)</a>
                                    <span class="text-muted">xiaoluode</span>
<a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/bootstrap/1.htm">bootstrap</a>
                                    <div><!DOCTYPE html>
<html>
<head lang="zh-CN">
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge"></div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>