Python 子进程 POpen 目录处理

Python Subprocess POpen Directory Handling

我是 python 的新手,我仍在尽我所能地努力学习这门手艺。我最近开始涉足自动化,而我尝试自动化的不太吸引人的事情之一是 Microsoft Baseline Security Analyzer 的自动化。它所做的只是检查机器上的补丁以及缺少哪些补丁,简单吧?

无论如何,我坚持的部分是我正在尝试执行应用程序以 运行 扫描位于文本文件中的多个主机名。我正在使用的命令如下所示:

subprocess.Popen(['mbsacli','/listfile','"C:\Users\me\Desktop\test.txt"', '/n', 'os+iis+sql+password'])

出现问题的部分是 python 处理目录路径的方式。我的意思是它告诉我以下内容:

Error: Cannot open file C:\Users\me\Desktop        est.txt

Desktop 和 "est.txt" 之间的巨大空白 space 是什么问题,首先应该是 test.txt 但它没有干净地处理斜杠 ()。

任何帮助都会很有帮助,谢谢。

编辑

到目前为止,我已经尝试了以下方法:

subprocess.Popen(['mbsacli','/listfile','r C:\Users\dxd0857\Desktop\test.txt', '/n', 'os+iis+sql+password'])

subprocess.Popen(['mbsacli','/listfile','C:\Users\dxd0857\Desktop\test.txt', '/n', 'os+iis+sql+password'])

subprocess.Popen(['mbsacli','/listfile','r C:\Users\dxd0857\Desktop\test.txt', '/n', 'os+iis+sql+password'])

结果还是一样的错误:

Error: Cannot open file r C:\Users\me\Desktop      est.txt

发生的情况是 \ 字符被解析为特殊字符,其中 \t 表示制表符。

因此您必须使用 \ 作为反斜杠:

subprocess.Popen(['mbsacli', 
                  '/listfile', 'C:\Users\me\Desktop\test.txt', 
                  '/n', 'os+iis+sql+password'])

...或改用原始字符串(感谢 @tripleee@eryksun):

subprocess.Popen(['mbsacli', 
                  '/listfile', r'C:\Users\me\Desktop\test.txt', 
                  '/n', 'os+iis+sql+password'])