以编程方式检测命令是否可以作为模块运行

我有一个接受命令的函数:


import subprocess



def run_command(command: str):

    subprocess.run(['python', '-m', command])

我想告诉您是否command可以作为python -m <command>.

例如:

  • doctest会算,因为我可以跑python -m doctest

  • foo不会,因为它会返回No module named foo

有没有办法告诉我,在我的函数中,是否command有一个可以运行的 Python 模块?

最简单的方法就是try-except,但我想避免这样做,因为它可能会掩盖其他错误。


海绵宝宝撒
浏览 53回答 1
1回答

翻阅古今

您可以捕获命令的输出并检查 stderr 以查看它返回的内容。此代码检查二进制字符串“No module named”是否在 stderr 中,这意味着未找到该命令import subprocessdef run_command(command: str):&nbsp; &nbsp; output = subprocess.run(['python', '-m', command], capture_output=True)&nbsp; &nbsp; if b"No module named" in output.stderr:&nbsp; &nbsp; &nbsp; print("Command not found")&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; #command was found
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python