我试图从 python 中调用 certutil 。但是我需要使用引号并且无法这样做。我的代码如下:
import subprocess
output= subprocess.Popen(("certutil.exe", "-view", '-restrict "NotAfter <= now+30:00, NotAfter >= now+00:00"' ), stdout=subprocess.PIPE).stdout
for line in output:
print(line)
output.close()
我认为单引号允许我在字符串中使用双引号。
此外,我尝试使用双引号和转义字符(\"
),但是我一直收到同样的错误:
Unknown arg: -restrict \\NotAfter\r\n'
出于某种原因,它似乎正在将"
翻译为\\
。
任何人都可以了解为何以及如何解决这个问题?
答案 0 :(得分:0)
我在安装的任何版本中都没有Python。但根据How do I used 2 quotes in os.system? PYTHON上的答案和subprocess的文档, subprocess 会自动处理带空格的参数的双引号要求。
所以你应该简单地使用:
import subprocess
output= subprocess.Popen(("certutil.exe", "-view", "-restrict", "NotAfter <= now+30:00, NotAfter >= now+00:00" ), stdout=subprocess.PIPE).stdout
for line in output:
print(line)
output.close()
调用 certutil 时使用的命令行是:
certutil.exe -view -restrict "NotAfter <= now+30:00, NotAfter >= now+00:00"
答案 1 :(得分:0)
output=subprocess.Popen(("certutil.exe -view -restrict \"NotAfter<=now+30:00,NotAfter>=now+00:00\"" ),stdout=subprocess.PIPE).stdout
这就是我们所需要的。我将命令作为带有2个参数的命令传递。我应该做的就是将它作为一个带有2个参数的大命令传递。