&符号是否需要转义?

时间:2015-07-29 14:56:21

标签: python python-2.7 escaping

我正在尝试在python 2.7.8中创建一个函数来删除远程PC上不再需要的文件。

如果我从命令行运行它,我可以这样做:

C:\>del /f /q \\RemotePC\d$\temp\testfile.txt && if exist \\RemotePC\d$\temp\testfile.txt (set errorlevel=1) else (set errorlevel=0)

从这里我得到了预期的结果:

C:\>echo %errorlevel%
0

但是当我尝试将它放入我的python函数时,它不起作用。测试变量未设置。

以下是我在python函数中的内容:

def DelFile(self, address, del_file):
    cmd_line = "del /f /q \\\\" + address + del_file + "\&\& if exist \"\\\\" + address + del_file + "\" (set errorlevel=1) else (set errorlevel=0)"

    myP = subprocess.Popen(cmd_line, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)

    out = timeout(myP.communicate, (), {}, 120, (None, None))
    result = out[0]
    error = out[1]
    error_code = None
    error_code = myP.returncode
    notes = []

    return cmd_line, result, error, error_code, notes

我已验证addressdel_file变量的格式是否正确,以便让我找到所需的文件。我还验证了它根据具体情况删除或删除了预期的文件。但由于某种原因,测试变量永远不会被设置。

我的理解是&符号需要被转义,就像在字符串中使用"\&"一样。这不是真的,还是我没有正确地逃避它?

2 个答案:

答案 0 :(得分:1)

你的cmd_line应该是这样的

cmd_line = "del /f /q \\\\{0}{1} & if exist \\\\{0}{1} (set test=1) else (set test=0)".format(address, del_file)

尝试使用一个&

答案 1 :(得分:0)

我想出了这个问题,事实证明我实际上有一些问题。第一个是&符号显然不需要转义(感谢FirebladeDan),第二个是我在&符号之前错过了一个空格(再次感谢FirebladeDan的格式化提示,这就是我注意到的丢失空间)。最后一个更多的是CMD问题而不是python,我试图直接设置errorlevel变量,当我应该使用exit /b和相应的1或{{1}时}。

作为附注,我还添加了0的使用,它不是解决方案所必需的,它只是有助于整体计划的表现。

以下是我最终的结果:

psexec