<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_plink_version():
 """Gets the Plink version from the binary. :returns: the version of the Plink software :rtype: str This function uses :py:class:`subprocess.Popen` to gather the version of the Plink binary. Since executing the software to gather the version creates an output file, it is deleted. .. warning:: This function only works as long as the version is returned as ``| PLINK! | NNN |`` (where, ``NNN`` is the version), since we use regular expresion to extract the version number from the standard output of the software. """

    # Running the command
    tmp_fn = None
    with tempfile.NamedTemporaryFile(delete=False) as tmpfile:
        tmp_fn = tmpfile.name + "_pyGenClean"

    # The command to run
    command = ["plink", "--noweb", "--out", tmp_fn]

    output = None
    try:
        proc = Popen(command, stdout=PIPE, stderr=PIPE)
        output = proc.communicate()[0].decode()
    except OSError:
        raise ProgramError("plink: command not found")

    # Deleting the output file automatically created by Plink
    if os.path.isfile(tmp_fn + ".log"):
        os.remove(tmp_fn + ".log")

    # Finding the version
    version = re.search(r"\|\s+PLINK!\s+\|\s+(\S+)\s+\|", output)
    if version is None:
        version = "unknown"
    else:
        version = version.group(1)

    return version