我正在尝试在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
我已验证address
和del_file
变量的格式是否正确,以便让我找到所需的文件。我还验证了它根据具体情况删除或删除了预期的文件。但由于某种原因,测试变量永远不会被设置。
我的理解是&符号需要被转义,就像在字符串中使用"\&"
一样。这不是真的,还是我没有正确地逃避它?
答案 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