I wrote a small code:
import os
os.system('users')
os.system('w')
This prints
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
But when i try :
import os
from pyslack import SlackClient
user_name = os.system('users')
login_details = os.system('w')
print user_name
print login_details
It has the following output:
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
Now i am not sure why i am not able to store the result in the varible , ie why is it printing 0 ? And what should be the correct way to get rid of it?
The value returned by the os.system is identical to the return value of the command you launched. Since most calls, like 'users' are written in C, they return 0 when the code is executed successfully ( they have a return 0;
at the end of the main()
).
If you want to save their output, you can redirect their output path (by default stdout
) to a text file, then read the text file.
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")
I bow to the subprocess.check_output
solution
From the os.system(command) .
os.system
just execute the command (a string) in a subshell.
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
Which means the above data is the output written to stdout by calling the Standard C function system()
not the return value .
On Unix, the return value is the exit status of the process encoded in the format specified for wait(). Note that POSIX does not specify the meaning of the return value of the C system() function, so the return value of the Python function is system-dependent.
On Windows, the return value is that returned by the system shell after running command, given by the Windows environment variable COMSPEC: on command.com systems (Windows 95, 98 and ME) this is always 0; on cmd.exe systems (Windows NT, 2000 and XP) this is the exit status of the command run; on systems using a non-native shell, consult your shell documentation.
So if the exit status is success, user_name
and login_details
will get a zero.
As a matter of fact, you can try this:;
import subprocess
user = subprocess.check_output(['users'])
details = subprocess.check_output(['w'])
print(user)
print(details)
The os.system
return the exit code of the command.
To capture the output of the command, you can use subprocess.check_output
output = subprocess.check_output('users', shell=True)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.