[英]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
只是在子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_name
和login_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.