-
python 执行linux命令 返回值 运行时间长_在C/python中执行linux命令并得到返回值以及输出 | 学步园...
2020-12-03 17:16:27一般来说,用shell的方便之处在于,能够直接调用linux系统命令,方便... python,使用os库/commands库方法1)使用commands.getstatusoutput方法,这是一个神奇的方法,能够直接得到返回值以及命令输出。官网说明:htt...一般来说,用shell的方便之处在于,能够直接调用linux系统命令,方便的得到结果。
但是shell scprit的约束重重(这里不再讲了)。下面说一下在C和python中如何调用linux命令、得到返回值并得到输出
1. python,使用os库/commands库
方法1)使用commands.getstatusoutput方法,这是一个神奇的方法,能够直接得到返回值以及命令输出。官网说明:http://docs.python.org/library/commands.html
import os
import commands
status,output=commands.getstatusoutput(cmdstr)
#***********************下面代码是判断返回值**********************************************************
if False==os.WIFEXITED(status) or 0!=os.WEXITSTATUS(status):
self.logging.info("check port false. port [%s] has not been listened. cmdstr: [%s]", port, cmdstr)
return False
self.logging.info("check port true. port [%s] has been listened. cmdstr: [%s]", cmdstr)
return True
status是返回值,ouput是输出
#但是这种方法存在一个问题,就是如果命令中(cmdstr)含有&符号,这个命令会出错,此时,需要使用os.system方法
方法2)使用os.system
status = os.system(cmdstr)
status是返回值,得不到输出,检查的方法如上
方法3)使用os.popen,这是一个和C相似的方法,既能得到返回值,也能得到输出,缺点是用起来稍微麻烦一些
p=os.popen('ssh 10.3.16.121 ps aux | grep mysql')
x=p.read()
print x
p.close()
p相当于打开的一个文件
方法4) 使用 subprocess模块,这个是比较新的模块,要替代
os.system
os.spawn*
os.popen*
popen2.*
commands.*
这些模块。 subprocess应用实例:
subprocess.call(args,
*, stdin=None, stdout=None, stderr=None, shell=False)
import subprocess
cmd=['ls','-l']
subprocess.call(cmd)
subprocess.call('cat /etc/passwd',shell=True)
2. C中使用#include 库,下面是我写的一个调用系统命令的函数。
使用popen,这个好处就是既能得到返回值也能得到输出,我将调用以及返回值判断封装了一下,便于平时使用
#include
int execute_cmd(const char *cmdstr, char * retstr, int len)
{
FILE *fpin=NULL;
if(NULL==(fpin=popen(cmdstr,"r")))
{
WRITE_LOG_EX(UL_LOG_FATAL,"execute command '%s' failed: %s",cmdstr,strerror(errno));
return 1;
}
if(NULL == fgets(retstr, len, fpin))
{
retstr = NULL;
}
return 0;
}
-
Shell中关于处理方法返回值问题详解
2020-09-15 06:18:39最近工作接触到了一些Linux上面的文本处理,数据量还是蛮大的,不可避免的学期了shell,awk等...下面这篇文章主要给大家介绍了关于Shell中关于处理方法返回值问题的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。 -
citizenshell.SecureShell()方法返回值类型转换
2019-11-13 16:15:20关于citizenshell.SecureShell()方法返回值类型转换 背景 使用citizenshell.SecureShell()连接远程的一台Linux机器,然后在shell里去读一个文件并且统计该文档中某个关键字出现的次数。后面需要使用这个次数进行...关于citizenshell.SecureShell()方法返回值类型转换
背景
使用citizenshell.SecureShell()
连接远程的一台Linux机器,然后在shell里去读一个文件并且统计该文档中某个关键字出现的次数。后面需要使用这个次数进行算数运算。def Count_words(count_word): shell = citizenshell.SecureShell(hostname=ip, username='xxxxx', password='xxxxx') out = shell("grep '%s' %s | wc -l"%(count_word,logfile)) return out num=Count_words(count_word1)-Count_words(count_word2)
运行以上代码报错如下:
TypeError: unsupported operand type(s) for -: 'ShellResult' and 'ShellResult'
,然后尝试把shell返回值转int
,修改如下代码:def Count_words(count_word): shell = citizenshell.SecureShell(hostname=ip, username='xxxxx', password='xxxxx') out = shell("grep '%s' %s | wc -l"%(count_word,logfile)) out = int(out) return out
运行以上代码报错如下:
AttributeError: ShellResult instance has no attribute '__trunc__'
查了一下shell返回值的类型<class 'citizenshell.shellresult.ShellResult'>
,看着是个特殊的类型,反正不能转int
。
之前只用过str
转int
,遇到这种情况毫无头绪啊~~
灵光一闪,是不是可以将shell返回值先转str再转int呢~ 尝试一下~def Count_words(count_word): shell = citizenshell.SecureShell(hostname=ip, username='xxxxx', password='xxxxx') out = shell("grep '%s' %s | wc -l"%(count_word,logfile)) out = int(str(out)) return out num=Count_words(count_word1)-Count_words(count_word2)
完美解决~
-
linux mysql 函数返回值_linux-C编程-MYSQL函数库
2021-01-19 13:47:301 简介用C语言连接MySQL数据库有两个步骤:1)初始化一个连接句柄结构2)建立连接2 库函数2.1 函数mysql_init初始化一个连接句柄结构函数原型:MYSQL *mysql_init(MYSQL * mysql);...两种常用的方法:MYSQL my_con...1 简介
用C语言连接MySQL数据库有两个步骤:
1)初始化一个连接句柄结构
2)建立连接
2 库函数
2.1 函数mysql_init
初始化一个连接句柄结构
函数原型:
MYSQL *mysql_init(MYSQL * mysql);
参数说明:
mysql:为NULL,则分配一个(返回其指针)。或按照传入的结构指针进行初始化。
MYSQL:返回值,若为NULL表示出错。
两种常用的方法:
MYSQL my_connection;
mysql_init(&my_connection);//以参数传出
或者
MYSQL *conn_ptr;
conn_ptr = mysql_init(NULL);//以返回值传出
2.2 函数mysql_options
可用于设置额外的连接选项,并影响连接的行为。一次设置一个,可多次调用该函数来设置数个选项。
应在mysql_init()之后、以及mysql_connect()或mysql_real_connect()之前调用mysql_options()。
函数原型:
int mysql_options(MYSQL *mysql, enum mysql_option option, const char *arg);
参数说明:
int:返回值,该函数成功时返回0。如果使用了未知选项,返回非0值。
2.3 函数mysql_real_connect
与数据库建立连接。
函数原型:
MYSQL *mysql_real_connect(MYSQL *mysql,
const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned long client_flag)
参数说明:
host:该值必须是主机名或IP地址。如果“host”是NULL或字符串"localhost",连接将被视为与本地主机的连接。
user:参数包含用户的MySQL登录ID。如果“user”是NULL或空字符串"",用户将被视为当前用户。在UNIX环境下,它是当前的登录名。
passwd:参数包含用户的密码。如果“passwd”是NULL,仅会对该用户的(拥有1个空密码字段的)用户表中的条目进行匹配检查。
db:是数据库名称。如果db为NULL,连接会将默认的数据库设为该值。
port:若不是0,其值将用作TCP/IP连接的端口号。
unix_socket:若不是NULL,该字符串描述了应使用的套接字或命名管道。
client_flag:的值通常为0。
MYSQL:如果连接成功,返回MYSQL*连接句柄。如果连接失败,返回NULL。对于成功的连接,返回值与第1个参数的值相同。
2.4 函数mysql_close
关闭数据库连接
函数原型:
void mysql_close(MYSQL *connection);
参数说明:
2.5 函数mysql_error
函数原型:
const char *mysql_error(MYSQL *mysql)常用结构:
if(mysql_errno(&mysql))
{
// an error occurred
}
2.6 函数mysql_errno
函数原型:
unsigned int mysql_errno(MYSQL *mysql)
参数说明:
int:对于由mysql指定的连接,mysql_errno()返回最近调用的API函数的错误代码,该函数调用可能成功也可能失败。“0”返回值表示未出现错误。
2.7 函数mysql_query
执行由“Null终结的字符串”查询指向的SQL查询。正常情况下,字符串必须包含1条SQL语句,而且不应为语句添加终结分号(‘;’)或“\g”。如果允许多语句执行,字符串可包含多条由分号隔开的语句。
函数原型:
int mysql_query(MYSQL *mysql, const char *query)
参数说明:
int:如果查询成功,返回0。如果出现错误,返回非0值。
2.8 函数mysql_real_query
2.9 函数mysql_affected_rows
返回上次UPDATE更改的行数,上次DELETE删除的行数,或上次INSERT语句插入的行数。对于UPDATE、DELETE或INSERT语句,可在mysql_query()后立刻调用。对于SELECT语句,mysql_affected_rows()的工作方式与mysql_num_rows()类似。
函数原型:
my_ulonglong mysql_affected_rows(MYSQL *mysql)
参数说明:
my_ulonglong:大于0的整数表明受影响或检索的行数。“0”表示UPDATE语句未更新记录,在查询中没有与WHERE匹配的行,或未执行查询。“-1”表示查询返回错误
2.10 函数mysql_use_result
对于成功检索数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN),必须调用mysql_store_result()或mysql_use_result()。
mysql_use_result()将初始化结果集检索,但并不像mysql_store_result()那样将结果集实际读取到客户端。它必须通过对mysql_fetch_row()的调用,对每一行分别进行检索。这将直接从服务器读取结果,而不会将其保存在临时表或本地缓冲区内,与mysql_store_result()相比,速度更快而且使用的内存也更少。客户端仅为当前行和通信缓冲区分配内存,分配的内存可增加到max_allowed_packet字节。
使用mysql_use_result()时,必须执行mysql_fetch_row(),直至返回NULL值,否则,未获取的行将作为下一个检索的一部分返回。
函数原型:
MYSQL_RES *mysql_use_result(MYSQL *mysql)示例代码:
MYSQL_RES * res_ptr = mysql_use_result(&my_connection);
MYSQL_ROW sqlrow;
if (res_ptr) {
while ((sqlrow = mysql_fetch_row(res_ptr))) {
printf("We inserted childno %s\n", sqlrow[0]);
}
mysql_free_result(res_ptr);
2.11 函数mysql_store_result
mysql_store_result()将查询的全部结果读取到客户端,分配1个MYSQL_RES结构,并将结果置于该结构中。
如果查询未返回结果集,mysql_store_result()将返回Null指针(例如,如果查询是INSERT语句)。
如果读取结果集失败,mysql_store_result()还会返回Null指针。通过检查mysql_error()是否返回非空字符串,mysql_errno()是否返回非0值,或mysql_field_count()是否返回0,可以检查是否出现了错误。
如果未返回行,将返回空的结果集。(空结果集设置不同于作为返回值的空指针)。
一旦调用了mysql_store_result()并获得了不是Null指针的结果,可调用mysql_num_rows()来找出结果集中的行数。
可以调用mysql_fetch_row()来获取结果集中的行,或调用mysql_row_seek()和mysql_row_tell()来获取或设置结果集中的当前行位置。
一旦完成了对结果集的操作,必须调用mysql_free_result()。
函数原型:
MYSQL_RES *mysql_store_result(MYSQL *mysql)
2.12 函数mysql_fetch_row
检索结果集的下一行。在mysql_store_result()之后使用时,如果没有要检索的行,mysql_fetch_row()返回NULL。在mysql_use_result()之后使用时,如果没有要检索的行或出现了错误,mysql_fetch_row()返回NULL。
函数原型:
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
2.13 函数mysql_free_result
函数原型:
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
2.5 示例代码
#include #include #include "mysql.h"
int main(int argc, char *argv[])
{
MYSQL *conn_ptr;
//mysql_init()
conn_ptr = mysql_init(NULL);
if (!conn_ptr) {
fprintf(stderr, "mysql_init failed\n");
return EXIT_FAILURE;
}
//mysql_real_connect()
conn_ptr = mysql_real_connect(conn_ptr, "127.0.0.1", "root", "","shellge", 0, NULL, 0);
if (conn_ptr) {
printf("Connection success\n");
} else {
printf("Connection failed\n");
}
//mysql_close()
mysql_close(conn_ptr);
return EXIT_SUCCESS;
}
-
linux shell 自定义函数方法(定义、返回值、变量作用域)
2021-01-20 16:09:222、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255 实例(testfun1.sh): #!/bin/sh fSum 3 2; function fSum() { echo $1,$2; return $(($1... -
linux fork()返回值
2020-05-23 18:26:53fork() 是Unix系统创建子进程的唯一方法,其他包或模块的底层都调fork。fork作用是复制克隆一个新进程(子进程),继续同时向下执行。 特点:fork被调用一次,返回两次,一次在父进程中返回子进程PID,一次在子进程...fork() 是Unix系统创建子进程的唯一方法,其他包或模块的底层都调fork。fork作用是复制克隆一个新进程(子进程),继续同时向下执行。
特点:fork被调用一次,返回两次,一次在父进程中返回子进程PID,一次在子进程中返回0。fork失败返回负数,发生在PID个数达上限或内存不足时。
-
Python中调用Linux命令并获取返回值
2020-10-09 15:48:49os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256/512表示未找到,该方法适用于shell命令不需要输出内容的场景。 os.system(cmd)会启动子进程,在子进程中执行cmd,... -
Linux C 程序执行shell命令并获取返回值结果的方法
2019-12-04 13:42:04Linux提供了很多的实用工具和脚本,在程序中调用工具和脚本,无疑可以简化程序,从而降低代码的缺陷数目。Linux shell 脚本也是一个强大的工具,我们可以根据需要编制脚本,然后在程序中调用自定义脚本。 《Unix ... -
Linux libusb "TIMEOUT -116" libusb_send返回值为-116 error解决方法
2019-05-15 09:50:41Linux下libusb开发遇到如下问题 ...libusb0-dll:[_usb_reap_async]timeouterror的错误提示 返回值为-116接收不到usb传来的数据 此问题原因有很多种,需一一分析! 解决方法 第一步:排除设备配置错误 检查us... -
获取main方法的返回值
2015-12-07 16:06:32通常main是不返回内容。但是实在要返回。也只能返回状态码给操作系统。 System.exit(1);//异常 ...Linux:echo $? 上一个执行命令之后的返回状态码 Windows:要在windows系统下查看状态,键入C:direct -
Linux libusb "LIBUSB_ERROR_ACCESS" libusb_open返回值为-3 error解决方法
2019-01-15 16:01:55在Linux下用libusb进行usb设备打开时遇到“LIBUSB_ERROR_ACCESS libusb_open函数返回值为-3” 此问题原因为该用户没有权限! 解决方法 第一步:执行以下命令 sudo chmod -R 777 /dev/bus/usb/ 重新运行测试... -
Linux调用外部程序并获得返回值
2020-05-14 14:07:20Linux调用外部程序并获得返回值 最近在使用C语言写一个项目,但其中需要用C++写一个小程序,需要获取这个小程序的运行结果。试了些方法也没办法把这段小程序嵌入这个项目,所以决定单独写一段C++小程序,编译完成后... -
Linux shell获得后台进程返回值
2015-03-05 11:27:45shell实现多进程的方法 -
用什么方法可以知道linux下跑的程序的返回值?
2015-11-19 08:30:53比如 aaa.c main() { return 123; } 编译成aaa 如果 ./aaa 以后,我想获得123,应该怎么做?谢谢各位大神 用C,用shell都行! -
Linux 中直接使用cd进入which返回值所在的目录的方法
2013-04-23 15:51:00一、需要的Linux命令 1.Linux下将一个命令的输出作为另一个命令的参数:``(键盘左上的点,注意和引号不同)或者$() 2.提取文件目录中文件名之外目录的命令:dirname 二、实现直接使用cd进入到which得到的Android的... -
在C/python中执行linux命令并得到返回值以及输出
2012-09-29 14:27:28一般来说,用shell的方便之处在于,能够直接调用linux系统命令,方便的得到结果。 但是shell scprit的约束...方法1)使用commands.getstatusoutput方法,这是一个神奇的方法,能够直接得到返回值以及命令输出。官网 -
在java程序中如何使用Linux命令获取得到的返回值?
2016-11-15 01:28:13我现在想在java程序中使用Linux命令获取得到的返回值,我在网上搜索好多都是使用的Process process =Runtime.getRuntime().exec("命令"); 这个方法。 有个疑惑,这个Linux命令可以直接在java里面被识别吗?测试的... -
JNI返回值方法总结
2013-06-17 10:08:10链接库 (windos下就是.dll库,Linux就是.so库了,不懂在Window下生成dll动态库的,具体流程可看我的这篇博客: 《Android中JNI的使用之一:Java原生JNI的使用、javah指令的使用以及图解教材》)。即可掌握JNI... -
每天三分钟搞定linux shell脚本(32) 函数返回值
2020-08-22 20:35:14函数可以产生返回值,有3个方法。 1)默认情况下是最后一条语句对应的退出状态码 2)return一个整数值 3)使用echo语句指定输出 针对方法1建立如下脚本: #/bin/bash function echo_correct { echo "echo ok" } ... -
linux下c++运行shell获取返回值
2018-08-08 18:32:44c++中运行shell脚本一般有三种方法,分别是system、exec和popen,都是调用 /bin/sh来执行参数指定的命令,/bin/sh 一般是一个软连接,指向某个具体的shell,比如bash,-c选项是告诉shell从字符串command中读取命令... -
linux shell自定义函数(定义、返回值、变量作用域)介绍
2021-01-10 13:52:55linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。 一、定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int... -
关于库函数中scanf函数有返回值以及如果停止运行的方法(windows和linux)
2014-10-06 16:37:091scanf函数返回的是成功输入的变量的个数 2当输入结束时scanf函数无法读取x,返回0 3关于scanf函数的输入格式中空格,回车符以及TAB都是无关紧要的...在linux的条件下输入完毕后按cirl+s即可结束输入 -
java-linux中调用jar并获取jar的返回值
2020-05-11 12:06:55调用jar其实就是调用类的main方法,main是没有返回值的,但其实jar仍然可以向外输出信息。比如sout,只要把打印的信息重定向到一个文件或控制台即可。 https://blog.csdn.net/tian6318/article/details/79349123 ..... -
linux shell 自定义函数(定义、返回值、变量作用域)
2017-03-16 22:23:01linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。 一、定义shell函数(define function) 语法: [ function ] funname [()] { action; ... -
c中获取python控制台输出_在C/python中執行linux命令並得到返回值以及輸出 | 學步園...
2020-12-16 04:44:53一般來說,用shell的方便之處在於,能夠直接調用linux系統命令,方便... python,使用os庫/commands庫方法1)使用commands.getstatusoutput方法,這是一個神奇的方法,能夠直接得到返回值以及命令輸出。官網說明:htt...
-
MySQL 多实例安装 及配置主从复制实验环境
-
Flutter 使用TabBar实现类似安卓中Fragment切换的效果
-
Group2.rar
-
2012-2018年同济大学818管理学概论考研真题
-
谷歌BeyondCorp系列论文合集.pdf
-
04、linux权限管理:用户组管理
-
同济大学822电路分析历年考研真题汇编
-
01、shell语法命令
-
Mysql数据库面试直通车
-
英雄岛源码.7z
-
同济大学812机械设计历年考研真题汇编
-
树莓派之驱动串口总线舵机
-
C++11 14 17 20 多线程从原理到线程池实战
-
SQLyog10.2.zip
-
NFS 实现高可用(DRBD + heartbeat)
-
算法笔记Codeup练习C语言11.8
-
程序员必修基础套餐课
-
Galera 高可用 MySQL 集群(PXC v5.6 + Ngin
-
ELF视频教程
-
移动安全学习笔记——组件安全之Activity组件漏洞挖掘