很抱歉,这是一个简单的问题并且之前已得到解答,但我在任何地方都找不到它。
我正在尝试监听 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/