如何将 os.system() 的输出存储在变量中

新手上路,请多包涵

我写了一个小代码:

 import os
os.system('users')
os.system('w')

这打印

ubuntu
 09:27:25 up 9 days, 21:23,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
ubuntu   pts/0    42.99.164.66     09:06    5.00s  0.10s  0.00s sh -c w

但是当我尝试时:

 import os
from pyslack import SlackClient

user_name = os.system('users')
login_details = os.system('w')

print user_name
print login_details

它有以下输出:

 ubuntu
 09:28:32 up 9 days, 21:24,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
ubuntu   pts/0    42.99.164.66     09:06    0.00s  0.11s  0.00s w
0
0

现在我不确定为什么我不能将结果存储在变量中,即为什么它打印 0?摆脱它的正确方法应该是什么?

原文由 Nishant Singh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

os.system 返回命令的退出代码。

要捕获命令的输出,您可以使用 subprocess.check_output

 output = subprocess.check_output('users', shell=True)

原文由 napuzba 发布,翻译遵循 CC BY-SA 3.0 许可协议

os.system 返回的值与您启动的命令的返回值相同。由于大多数调用,如“用户”,都是用 C 语言编写的,因此当代码成功执行时,它们会返回 0(它们在 return 0; 的末尾有一个 main() )。

如果你想保存他们的输出,你可以将他们的输出路径(默认 stdout )重定向到一个文本文件,然后读取文本文件。

 user_name = os.system('users > users.txt')
login_details = os.system('w > w.txt')

with open("users.txt", "r") as f:
    for line in f:
        print line
with open("w.txt", "r") as f:
    for line in f:
        print line

os.system("rm users.txt")
os.system("rm w.txt")

我向 subprocess.check_output 解决方案鞠躬

原文由 PMonti 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题