Python无法识别命令,但是CMD可以。

3

我已经安装了qpdf,并且正在尝试通过Python调用它。

我已经将其路径添加到系统环境变量中,并且可以通过命令提示符成功运行以下命令:

qpdf --decrypt input.pdf output.pdf

这段代码可以正常运行,没有问题。

然而,当尝试使用Python调用(代码来自这里)时,我收到以下错误信息:

'qpdf' 不是内部或外部命令,也不是可运行的程序或批处理文件。

import subprocess
subprocess.call(["cmd", "/c", "qpdf --decrypt input.pdf output.pdf"], shell=True)
# or 
subprocess.run(["qpdf", "--decrypt", "input.pdf", "output.pdf"], shell=True)
# or
subprocess.run(["qpdf --decrypt input.pdf output.pdf"], shell=True)

为什么我可以在cmd中运行,但在Python中却不能?


请确保您的Python程序与CMD工作的目录相同。 - MD5
1
可能是因为您使用的是添加qpdfPATH之前的Shell会话。请尝试在新会话中运行Python。 - JMAA
根据文档,“在Windows上,如果shell=True,则COMSPEC环境变量指定默认的shell。只有当您希望执行的命令内置于shell中(例如dir或copy)时,您才需要在Windows上指定shell=True。您不需要使用shell=True来运行批处理文件或基于控制台的可执行文件。” - Iguananaut
如果您想将其转换为答案,请这样做,我可以将问题标记为已回答。 - BruceWayne
@Iguananaut - 啊,谢谢你澄清这个问题! - BruceWayne
显示剩余2条评论
1个回答

1
根据评论:
问题在于环境变量仅在启动可执行文件/ shell 会话/任何内容时加载。在这里,一个目录被添加到 PATH 环境变量中,因此需要重新启动 sublime text 才能看到更新的 PATH。这不是特定于 sublime 的,如果您直接从终端或其他 IDE 运行,情况也是如此。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接