如何使用子进程在Python中调用带有双引号的应用程序?

时间:2014-08-22 16:06:37

标签: python-3.x certutil

我试图从 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'

出于某种原因,它似乎正在将"翻译为\\

任何人都可以了解为何以及如何解决这个问题?

2 个答案:

答案 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个参数的大命令传递。