我写了一个小代码:
public class Contracts{
public function web(){
$collection = $this->hasMany('App\Web');
return $collection ? $collection : [];
}
}
打印
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
现在我不确定为什么我无法将结果存储在varible中,即为什么打印0?什么应该是摆脱它的正确方法?
答案 0 :(得分:2)
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
解决方案
答案 1 :(得分:2)
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()
而非返回值写入标准输出的输出。
在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文档。
因此,如果退出状态成功,user_name
和login_details
将获得零。
事实上,你可以试试这个:;
import subprocess
user = subprocess.check_output(['users'])
details = subprocess.check_output(['w'])
print(user)
print(details)
答案 2 :(得分:2)
os.system
返回命令的退出代码。
要捕获命令的输出,您可以使用subprocess.check_output
output = subprocess.check_output('users', shell=True)