Python-os.system在输出的末尾放置了一个不需要的(和不必要的)换行符和一个0

Python-os.system在输出的末尾放置了一个不需要的(和不必要的)换行符和一个0,python,os.system,Python,Os.system,我不知道它为什么这样做,当我试图修剪它时,它会吐出一个错误 >>> 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

我不知道它为什么这样做,当我试图修剪它时,它会吐出一个错误

>>> 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
打印操作系统(“正常运行时间”) 21:05上升9:40,2个用户,平均负载:0.69 0.76 0.82 0 >>>打印操作系统(“正常运行时间”)[:-2] 21:07上升9:42,2个用户,平均负载:0.75 0.74 0.80 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:“int”对象不可下标
有人知道我如何阻止这种情况发生,或者如何删除它而不出错吗?谢谢

os.system
不返回标准输出的内容。如果要捕获这些数据,请使用os.popen(“正常运行时间”).read()

不必打印输出

os.system调用的实际命令打印到stdout,函数os.system()以整数形式返回命令的返回值

所以试试看

os.system('uptime')
首先在子shell中执行命令。子shell打印您看到的第一行

在Unix上,返回值是进程的退出状态。这就是您在解释器中看到的
0
。您可以通过将其指定给变量来抑制此操作:

>>> x = os.system('uptime')
14:12  up 21:45, 4 users, load averages: 1.13 0.93 0.82
>>> 
或者,使用:

也许您更希望在变量中捕获输出和返回的状态,以便在显示(或不显示)它们之前可以对它们进行操作:


os.system
没有做任何这样的事情;发生的情况是,
uptime
本身正在写入stdout(真正的stdout,而不是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'

有关更多详细信息,请参见。

虽然这样做有效,但应该注意的是,自Python 2.6以来,os.popen一直是。
>>> 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
>>> 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'