将以下MATLAB命令转换为Python的最佳方法是什么?
[~,hostname] = system('hostname');
答案 0 :(得分:2)
您正在寻找socket
界面中的gethostname()
,“可在所有现代Unix系统,Windows,MacOS以及可能的其他平台上使用。”(来自docs):
>>> import socket
>>> socket.gethostname()
'DK07'
如果gethostname()
由于某种原因失败,则会引发异常。然而,如果名称被省略或为空,则会有所不同,在这种情况下,它被解释为本地主机。
另一个便携式等效物(仅为了完整性)是
>>> import platform
>>> platform.node()
'DK07'
您还应该看一下Cong Ma's answer的好例子。
答案 1 :(得分:1)
举一个关于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
执行命令:
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