Matlab 中有空设备吗?

Is there a null device in Matlab?

我正在尝试找到一种简单的方法来打开和关闭文本文件的日志记录,就像 here in Python. Their solution was to use a valid file name where logging is desired and to use the null device 'dev/null' 中看到的示例一样。他们正在使用重定向,但我希望使用 fopen.

是否有某种方法可以执行以下操作,如果重要的话,哪个词适用于 Unix 或 Windows 系统。

nullFID = fopen('/dev/nul', 'w')

我正在修改的脚本可以通过在某些破坏场景中进行详细日志记录而受益匪浅,在这些场景中,我们希望为少数文件提取精细级别的细节,但对于批处理脚本来说,这些细节会变得太大通常是目标。

看起来可以做到,有人在 MathWorks 上使用类似 "null file" 的术语发布了答案。不确定这是否是有效的术语,但可能是 "null device file".

的缩写

引用空设备的方式是OS依赖...

nullFID = fopen( 'NUL:'    ); % Windows
nullFID = fopen('/dev/null'); % UNIX

而且似乎参考因 Matlab 版本而异。考虑以下脚本

ver
nullFID = fopen( 'NUL:' , 'w' )
fprintf( nullFID , '12345' )
nullFID = fopen( 'NUL:'  )
fprintf( nullFID , '12345' )
nullFID = fopen('NUL' , 'w' )
nullFID = fopen('NUL' )

以及从两个版本的 Matlab 生成的以下输出...

R2011b

>> ver
-------------------------------------------------------------------------------------
MATLAB Version 7.13.0.564 (R2011b)
MATLAB License Number: xxxx
Operating System: Microsoft Windows 7 Version 6.1 (Build 7601: Service Pack 1)
Java VM Version: Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) 64-Bit Server VM mixed mode
-------------------------------------------------------------------------------------
MATLAB                                                Version 7.13       (R2011b)

>> nullFID = fopen( 'NUL:' , 'w' )
nullFID = 119

>> fprintf( nullFID , '12345' )
ans = 5

>> nullFID = fopen( 'NUL:' )
nullFID = 120

>> fprintf( nullFID , '12345' )
ans = 0

>> nullFID = fopen('NUL' , 'w' )
Warning: You have chosen a reserved DOS device name for your filename.
Please choose another valid filename
nullFID = -1

>> nullFID = fopen('NUL')
nullFID = -1

R2015a

>> ver
----------------------------------------------------------------------------------------------------
MATLAB Version: 8.5.0.197613 (R2015a)
MATLAB License Number: 1093113
Operating System: Microsoft Windows 7 Professional  Version 6.1 (Build 7601: Service Pack 1)
Java Version: Java 1.7.0_60-b19 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode
----------------------------------------------------------------------------------------------------
MATLAB                                                Version 8.5        (R2015a)

>> nullFID = fopen( 'NUL:' , 'w' )
nullFID = -1

>> fprintf( nullFID , '12345' )
Error using fprintf
Invalid file identifier. Use fopen to generate a valid file identifier.

>> nullFID = fopen( 'NUL:' )
nullFID = 8

>> fprintf( nullFID , '12345' )
ans = 0

>> nullFID = fopen('NUL' , 'w' )
Warning: You have chosen a reserved DOS device name for your filename.
Please choose another valid filename. 
nullFID = -1

>> nullFID = fopen('NUL' )
nullFID = -1

R2018a

None 以上建议似乎在 R2018a 中有效:

>> ver matlab
-----------------------------------------------------------------------------------------------------
MATLAB Version: 9.4.0.813654 (R2018a)
Operating System: Microsoft Windows 10 Pro Version 10.0 (Build 16299)
Java Version: Java 1.8.0_144-b01 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode
-----------------------------------------------------------------------------------------------------
MATLAB                                                Version 9.4         (R2018a)
>> nullFID = fopen( 'NUL:' , 'w' )
Error using fopen
The file name contains characters that are not contained in the filesystem encoding.
 Certain operations may not work as expected.

>> fprintf( nullFID , '12345' )
Undefined function or variable 'nullFID'.

>> nullFID = fopen( 'NUL:' )
Error using fopen
The file name contains characters that are not contained in the filesystem encoding.
 Certain operations may not work as expected.

>> fprintf( nullFID , '12345' )
Undefined function or variable 'nullFID'.

>> nullFID = fopen('NUL' , 'w' )
Warning: You have chosen a reserved DOS device name for your filename.
Please choose another valid filename. 

nullFID =

    -1

>> nullFID = fopen('NUL' )

nullFID =

    -1