【发布时间】:2021-11-30 01:34:18
【问题描述】:
我正在编写一个应该在新子进程中运行命令的脚本。目前我为此使用 python subprocess.Popen()。我的问题是我可以运行“dir”之类的命令,但不能运行已安装的程序。当我打开 cmd 提示符并编写“program -h”时,我得到了正常的帮助输出。当我尝试使用 Popen() 打开它时,我收到一个程序无法找到的错误。就好像他没有找到可执行文件,即使我手动查找时 cmd 提示可以找到它。对于测试,我使用 ncat 作为示例程序。
import time
from subprocess import *
import subprocess
execom = "ncat -h" # DOES NOT WORK IN PYTHON BUT MANUALLY IN CMD
execom1 = "ncat -h -e cmd" # DOES NOT WORK IN PYTHON BUT MANUALLY IN CMD
execom2 = "dir" # WORKS
p = Popen(execom, shell=True)
out = p.communicate()[0]
有人知道如何解决这个问题吗?
编辑: 我得到了提示 2e0byo 的解决方案。我添加了系统变量的路径,但系统需要额外重启才能通过它。它无需从 cmd 提示符重新启动即可工作,但不能从 python 脚本重新启动。重新启动后,它现在都可以工作了。
【问题讨论】:
-
os.getenv("PATH")显示什么?目录中是否包含ncat? (不是:ncat是正确的.exe,还是例如批处理脚本,在这种情况下,您可以直接调用.exe吗?无论如何,如果您使用 ,它可能会起作用.exe 的完整路径 -
os.getenv("PATH")显示以下内容:C:\Users\IEUser\PycharmProjects\Interpreter\Scripts;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\ProgramData\chocolatey\bin;C:\Program Files\Puppet Labs\Puppet\bin;C:\Program Files\Git\cmd;C:\Users\IEUser\AppData\Local\Microsoft\WindowsApps;Ncat 是可执行文件,没有脚本。当我查看 Windows 设置时,我看到我已将C:\Program Files (x86)\Nmap添加到路径(对于用户和系统)。 “ncat”是我的 Nmap 安装的一部分,在这个文件夹中。
标签: python windows cmd subprocess popen