系统('hostname')从 MATLAB 到 Python

System('hostname') from MATLAB to Python

将以下 MATLAB 命令转换为 Python 的最佳方法是什么?

[~,hostname] = system('hostname');

您正在寻找 gethostname() from thesocket interface, which is "available on all modern Unix systems, Windows, MacOS, and probably additional platforms." (from the docs):

>>> import socket
>>> socket.gethostname()
'DK07'

如果 gethostname() 由于某种原因失败,它会引发异常。但是,如果名称被省略或为空,这就不同了,在这种情况下,它被解释为本地主机。

另一个可移植的等价物(只是为了完整起见)是

>>> import platform
>>> platform.node()
'DK07'

您还应该看看 中的一个很好的例子。

举个 Kong 解释的例子,你总是可以像这样把系统调用包装在 try 块中:

import sys
import errno
try:
    hostname = socket.gethostname()
except socket.error as s_err:
    print >> sys.stderr, ("error: gethostname: error %d (%s): %s" %
                          (s_err.errno, errno.errorcode[s_err.errno],
                           s_err.strerror))

这会将错误信息格式化为类似 error: gethostname: error 13 (EACCES): Permission denied 的格式,尽管这只是一种假设情况。


如果您想像 system() 那样使用外部进程(但不生成 shell),您可以使用 subprocess:[=16= 执行命令]

import subprocess
cmd = subprocess.Popen(["hostname"], stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE)
cmdout, cmderr = cmd.communicate()
print "Command exited with code %d" % cmd.returncode
print "Command output: %s" % cmdout