python - Popen子进程异常

标签 python exception python-3.x popen

很抱歉,这是一个简单的问题并且之前已得到解答,但我在任何地方都找不到它。

我正在尝试监听 UDP 数据包,如果它们是某些数据包,则运行不同的批处理脚本。我的工作正常,但我发现如果 Popen 命令找不到该文件,它会触发异常并且脚本停止运行。理想情况下,我希望它打印一条消息,然后继续监听其他数据包并对它们采取行动,只是给我们一条用于调试的消息。这是我使用过的代码,我该怎么做?

if rxdata == "Camera 1":
    from subprocess import Popen
    try:
        p = Popen("Camera 1.bat", cwd=r"C:\xxx")
        stdout, stderr = p.communicate()
    except FileNotFoundError():
        print('Camera 1.bat not found')
elif rxdata == "Camera 2":
    from subprocess import Popen
    p = Popen("Camera 2.bat", cwd=r"C:\xxx")
    stdout, stderr = p.communicate()

在这两个示例中,我都收到以下内容并且脚本关闭。

Traceback (most recent call last):
   File "C:\UDP Listener.py", line 42, in <module>
     p = Popen("Camera 1.bat", cwd=r"C:\xxx")
   File "C:\Python34\lib\subprocess.py", line 858, in __init__
     restore_signals, start_new_session)
   File "C:\Python34\lib\subprocess.py", line 1111, in _execute_child
     startupinfo)
   FileNotFoundError: [WinError 2] The system cannot find the file specified

提前致谢

马特

最佳答案

您不能在FileNotFoundError后面使用括号(不要调用它,只是“命名”它)。测试(使用 Python 2):

try:
    b = a
except NameError():
    print "NameError caught."

执行:

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    b = a
NameError: name 'a' is not defined

例如,OSError 是一种类型,而 OSError() 创建此类型的实例:

>>> type(OSError)
<type 'type'>
>>> type(OSError())
<type 'exceptions.OSError'>

关于python - Popen子进程异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24411238/

相关文章:

python - 类型错误 : unhashable type on new computer but not old

python - 如何用 Python 中的空格替换文本中的特殊字符?

java - 异常抛出 - 用法

python-3.x - 使用随机生成的数字创建矩阵

python - 如何获取包含 Pyspark Dataframe 中另一列中给出的多列值的列表列?

python - for循环中的比较运算符

python - 我应该把 try/except 放在哪里?

python - 如何序列化异常

python-3.x - 在 PySide.QTextEdit 中突出显示文本

python - 查找第一个索引,其中元素之和大于元素本身