4

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

>>> 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

4 回答 4

6

os.system没有做任何这样的事情;发生的事情是它uptime本身正在写入标准输出(真正的标准输出,而不是 Python 的sys.stdout),并os.system返回 0 的返回值uptime(表明它成功退出)。

如果您想uptime在 Python 中将字符串打印到标准输出,则必须使用其他调用方式,例如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文档

于 2013-02-19T03:21:47.150 回答
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
于 2013-02-19T03:16:34.933 回答
2

os.system不返回标准输出的内容。如果你想捕捉那些使用os.popen("uptime").read()

于 2013-02-19T03:11:54.240 回答
0

您不必打印输出。

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

所以试试

os.system('uptime')
于 2013-02-19T03:14:22.903 回答