<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def scp(host, src, dst, user=None, path=None):
 """ Copy a file or directory from a remote location. A thin wrapper around the scp (1) system command. If the destination already exists, this will attempt to overwrite it. Arguments: host (str):
 name of the host src (str):
 path to the source file or directory. dst (str):
 path to the destination file or directory. user (str, optional):
 Alternative username for remote access. If not provided, the default scp behaviour is used. path (str, optional):
 Directory containing scp command. If not provided, attempt to locate scp using which(). Raises: CommandNotFoundError: If scp binary not found. IOError: if transfer fails. """

    # Create the first argument.
    if user is None:
        arg = "{host}:{path}".format(host=host, path=src)
    else:
        arg = "{user}@{host}:{path}".format(user=user, host=host, path=src)

    # Get path to scp binary.
    scp_bin = which("scp", path=(path,))
    if scp_bin is None:
        raise CommandNotFoundError("Could not find scp in '{0}'".format(path))

    # Run system "scp" command.
    ret,out,err = run([scp_bin,
                       "-o", "StrictHostKeyChecking=no",
                       "-o", "UserKnownHostsFile=/dev/null",
                       arg, dst])

    # Check return code for error.
    if ret:
        raise ScpError(out, err)