精华内容
下载资源
问答
  • 一般来说,用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;

    }

    展开全文
  • 最近工作接触到了一些Linux上面的文本处理,数据量还是蛮大的,不可避免的学期了shell,awk等...下面这篇文章主要给大家介绍了关于Shell中关于处理方法返回值问题的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
  • 关于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
    之前只用过strint,遇到这种情况毫无头绪啊~~
    灵光一闪,是不是可以将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)
    

    完美解决~

    展开全文
  • 1 简介用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;

    }

    展开全文
  • 2、参数返回,可以显示加: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:53
    fork() 是Unix系统创建子进程的唯一方法,其他包或模块的底层都调fork。fork作用是复制克隆一个新进程(子进程),继续同时向下执行。 特点:fork被调用一次,返回两次,一次在父进程中返回子进程PID,一次在子进程...

    fork() 是Unix系统创建子进程的唯一方法,其他包或模块的底层都调fork。fork作用是复制克隆一个新进程(子进程),继续同时向下执行。

    特点:fork被调用一次,返回两次,一次在父进程中返回子进程PID,一次在子进程中返回0。fork失败返回负数,发生在PID个数达上限或内存不足时。

    展开全文
  • os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256/512表示未找到,该方法适用于shell命令不需要输出内容的场景。 os.system(cmd)会启动子进程,在子进程中执行cmd,...
  • Linux提供了很多的实用工具和脚本,在程序中调用工具和脚本,无疑可以简化程序,从而降低代码的缺陷数目。Linux shell 脚本也是一个强大的工具,我们可以根据需要编制脚本,然后在程序中调用自定义脚本。  《Unix ...
  • Linux下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进行usb设备打开时遇到“LIBUSB_ERROR_ACCESS libusb_open函数返回值为-3” 此问题原因为该用户没有权限! 解决方法 第一步:执行以下命令 sudo chmod -R 777 /dev/bus/usb/ 重新运行测试...
  • Linux调用外部程序并获得返回值 最近在使用C语言写一个项目,但其中需要用C++写一个小程序,需要获取这个小程序的运行结果。试了些方法也没办法把这段小程序嵌入这个项目,所以决定单独写一段C++小程序,编译完成后...
  • Linux shell获得后台进程返回值

    千次阅读 2015-03-05 11:27:45
    shell实现多进程的方法
  • 比如 aaa.c main() { return 123; } 编译成aaa 如果 ./aaa 以后,我想获得123,应该怎么做?谢谢各位大神 用C,用shell都行!
  • 一、需要的Linux命令 1.Linux下将一个命令的输出作为另一个命令的参数:``(键盘左上的点,注意和引号不同)或者$() 2.提取文件目录中文件名之外目录的命令:dirname 二、实现直接使用cd进入到which得到的Android的...
  • 一般来说,用shell的方便之处在于,能够直接调用linux系统命令,方便的得到结果。 但是shell scprit的约束...方法1)使用commands.getstatusoutput方法,这是一个神奇的方法,能够直接得到返回值以及命令输出。官网
  • 我现在想在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...
  • 函数可以产生返回值,有3个方法。 1)默认情况下是最后一条语句对应的退出状态码 2)return一个整数值 3)使用echo语句指定输出 针对方法1建立如下脚本: #/bin/bash function echo_correct { echo "echo ok" } ...
  • linux下c++运行shell获取返回值

    千次阅读 2018-08-08 18:32:44
    c++中运行shell脚本一般有三种方法,分别是system、exec和popen,都是调用 /bin/sh来执行参数指定的命令,/bin/sh 一般是一个软连接,指向某个具体的shell,比如bash,-c选项是告诉shell从字符串command中读取命令...
  • linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。 一、定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int...
  • 1scanf函数返回的是成功输入的变量的个数 2当输入结束时scanf函数无法读取x,返回0 3关于scanf函数的输入格式中空格,回车符以及TAB都是无关紧要的...在linux的条件下输入完毕后按cirl+s即可结束输入
  • 调用jar其实就是调用类的main方法,main是没有返回值的,但其实jar仍然可以向外输出信息。比如sout,只要把打印的信息重定向到一个文件或控制台即可。 https://blog.csdn.net/tian6318/article/details/79349123 .....
  • linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。下面说说它的定义方法,以及调用需要注意那些事项。 一、定义shell函数(define function) 语法: [ function ] funname [()] { action; ...
  • 一般來說,用shell的方便之處在於,能夠直接調用linux系統命令,方便... python,使用os庫/commands庫方法1)使用commands.getstatusoutput方法,這是一個神奇的方法,能夠直接得到返回值以及命令輸出。官網說明:htt...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 648
精华内容 259
关键字:

linux方法返回值

linux 订阅