[md]在你提供的 Python 脚本中,你尝试使用 `subprocess.Popen` 来运行 `xdg-open` 命令,并期望在命令失败时捕获一个异常。然而,`subprocess.Popen` 本身并不会在命令执行失败时抛出异常;它只是启动一个子进程。异常(如果发生)只会在子进程尝试执行命令时产生,并且这些异常不会自动传播回父进程。 如果你想要捕获由于无效参数导致的 `xdg-open` 命令失败,你需要等待子进程结束,并检查它的退出状态码。如果退出状态码不是 0,这意味着命令执行失败。这里是如何修改你的代码来实现这一点: ```python import subprocess try: # 启动子进程执行 xdg-open 命令 process = subprocess.Popen(["xdg-open", "invalid"]) # 等待子进程结束 process.wait() # 检查子进程的退出状态码 if process.returncode != 0: print("Exception: xdg-open command failed with return code", process.returncode) else: print("Launched successfully") except Exception as e: print("An exception occurred:", e) ``` 这段代码会启动 `xdg-open` 命令,然后等待它结束。之后,它会检查进程的 `returncode`。如果 `returncode` 不为 0,它会打印出相应的错误消息。如果 `returncode` 为 0,它会打印出成功启动的消息。如果捕获到其他异常,它会打印出 "An exception occurred"。 请注意,`subprocess.Popen` 可能抛出的异常类型是 `OSError` 或其子类,如果你想要捕获这类异常,应该使用 `except OSError as e:` 而不是 `except:`,以避免捕获不必要的异常,并且可以提供更具体的错误信息。 关于你提到的环境:Python 3.10.12 在 Ubuntu 22.04.4 LTS 上运行,这应该不是问题所在,因为 `subprocess` 模块在 Python 中是标准且稳定的。问题更可能是由于命令执行失败,而不是 Python 或其环境。 [/md] |