簡體   English   中英

如何在變量中存儲os.system()的輸出

[英]How to store output of os.system() in a variable

我寫了一個小代碼:

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? 什么應該是擺脫它的正確方法?

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解決方案低頭

os.system(命令)

os.system只是在子shell中執行命令(字符串)。

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

這意味着上面的數據是通過調用標准C函數system()而不是返回值寫入stdout的輸出。

在Unix上, 返回值是以wait()指定的格式編碼的進程的退出狀態 請注意,POSIX未指定C system()函數的返回值的含義,因此Python函數的返回值取決於系統。

在Windows上, 返回值是系統shell在運行命令后返回的值 ,由Windows環境變量COMSPEC給出:在command.com系統上(Windows 95,98和ME),它始終為0; 在cmd.exe系統(Windows NT,2000和XP)上,這是命令運行的退出狀態; 在使用非本機shell的系統上,請參閱shell文檔。

因此,如果退出狀態為success,則user_namelogin_details將為零。

事實上,你可以試試這個:

import subprocess
user = subprocess.check_output(['users'])
details = subprocess.check_output(['w'])

print(user)
print(details)

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

要捕獲命令的輸出,可以使用subprocess.check_output

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM