【发布时间】:2014-03-23 02:07:27
【问题描述】:
在 Python 中,我运行一个使用 FORTRAN 制作的 exe。我使用subprocess 模块。该exe访问并写入多个文件。如果我将这些文件设为只读,我会在我的 Python 控制台中看到以下跟踪。
我尝试使用try、except 语句。但我无法捕捉到错误。我也尝试使用p.stdout.readline()。但是没有成功。
是否有系统的方法来捕获此类错误。
代码:
import subprocess
p = subprocess.Popen('C:\\TGSSR\\test.exe' , shell=True, stdout=subprocess.PIPE)
追溯:
forrtl: severe (9): permission to access file denied, unit 6, file C:\test\mar22_SSOUT\RawReadLog.dat
Image PC Routine Line Source
test.exe 0116DC40 Unknown Unknown Unknown
test.exe 0113D42F Unknown Unknown Unknown
test.exe 0112AE97 Unknown Unknown Unknown
test.exe 0112A1DA Unknown Unknown Unknown
test.exe 0110D746 Unknown Unknown Unknown
test.exe 0108B9AC Unknown Unknown Unknown
test.exe 01173FE3 Unknown Unknown Unknown
test.exe 011588F5 Unknown Unknown Unknown
kernel32.dll 76D33677 Unknown Unknown Unknown
ntdll.dll 77A39F42 Unknown Unknown Unknown
ntdll.dll 77A39F15 Unknown Unknown Unknown
【问题讨论】:
-
不相关:为避免转义反斜杠,您可以使用原始字符串文字:
r'C:\TGSSR\test.exe'。不要在 Windows 上使用shell=True,除非您使用 shell 功能,例如调用内置 shell 命令,例如dir。不要使用stdout=PIPE,除非您稍后阅读p.stdout -
感谢 cmets!
-
有时错误会写入标准输出/标准错误之外(直接写入终端)。见Capture “Segmentation fault” message for a crashed subprocess: no out and err after a call to communicate()
标签: python subprocess