我正在尝试从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 \NotAfterrn'
出于某种原因,它似乎正在将"
翻译成\
.
任何人都可以深入了解为什么以及如何解决它?
我没有安装任何版本的Python。但是根据回答 如何在os.system中使用2个引号?PYTHON和子进程的文档,子进程自动处理带空格的参数上的双引号要求。
所以你应该需要简单地使用:
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"
output=subprocess.Popen(("certutil.exe -view -restrict "NotAfter<=now+30:00,NotAfter>=now+00:00"" ),stdout=subprocess.PIPE).stdout
这是需要的。我将命令作为带有 2 个参数的命令传递。我应该做的是将其作为一个带有 2 个参数的大命令传递。