Python - os.system 在输出末尾添加了不必要的换行和0
我不知道为什么会这样,当我尝试去掉多余的部分时,它却报错了。
>>> print os.system('uptime')
21:05 up 9:40, 2 users, load averages: 0.69 0.76 0.82
0
>>> print os.system('uptime')[:-2]
21:07 up 9:42, 2 users, load averages: 0.75 0.74 0.80
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not subscriptable
有没有人知道我该怎么做才能避免这个问题,或者怎么去掉它而不出现错误?谢谢!
4 个回答
2
os.system
这个命令不会返回标准输出的内容。如果你想获取这些内容,可以使用 os.popen("uptime").read()
。
3
os.system()
首先会在一个子shell中执行命令。这个子shell会打印出你看到的第一行内容。
在Unix系统中,返回值是这个进程的退出状态。也就是你在解释器中看到的那个 0
。你可以通过把它赋值给一个变量来抑制这个输出:
>>> x = os.system('uptime')
14:12 up 21:45, 4 users, load averages: 1.13 0.93 0.82
>>>
另外,你也可以使用 subprocess.call()
:
>>> import subprocess
>>> status = subprocess.call('uptime')
14:19 up 21:52, 4 users, load averages: 1.12 0.93 0.86
>>> print status
0
也许你更想把输出和返回状态都保存到变量中,这样你可以在显示它们之前进行处理(或者不处理):
>>> pipe = subprocess.Popen(['uptime'], stdout=subprocess.PIPE, shell=True)
>>>
>>> for line in pipe.stdout:
... print line
...
14:36 up 22:10, 4 users, load averages: 0.59 0.59 0.65
>>> status = pipe.wait()
>>>
>>> print status
0
6
os.system
并没有做什么特别的事情;实际上,uptime
自己是在输出信息到标准输出(也就是你在终端看到的那种输出,不是 Python 的 sys.stdout
)。而 os.system
只是返回了 uptime
的返回值,这个值是 0,表示它运行成功。
如果你想在 Python 里获取 uptime
输出的内容,你需要用其他的方法来调用它,比如使用 subprocess.Popen
。
>>> import subprocess
>>> uptime = subprocess.Popen('uptime', stdout=subprocess.PIPE)
>>> output = uptime.stdout.read()
>>> output
' 04:20:09 up 12:13, 5 users, load average: 0.99, 1.15, 1.25\n'
想了解更多细节,可以查看 subprocess
的文档。