zoukankan      html  css  js  c++  java
  • 关于用python作为第三方程序,来调用shell命令的问题,以及返回值格式解析

    1.用python语言作为第三方,调用shell

    在python2.x中,可以通过包commands来进行调用shell命令。如下:

    cmd就是你要调用的shell命令,把环境配置好,输入正确的命令格式,就可以作为一个第三方程序,来进行命令的调用了。

    但是在python3.x中取消了commands包,所以这种方式肯定是不能用了,解决方法很多,这边推荐一种万能的方式。

    同理,你只要管好,环境和命令正确就可以了。这个命令在最新版的python已经逐渐被淘汰了。它最大的缺点是异步,有时候你的逻辑很正确,但是一用它,会给你带来很大的烦恼:网络状况不好时,它会给你返回一个‘’空字符串,对于命令的执行的返回,你就没法判断到底有没有执行成功。python3.x就很好的解决了这个问题。

     这里推荐用python3.x的subprocess模块中的Popen()来解决,它会一直等待命令的执行并返回。

    这里简要介绍下:

    p = subprocess.Popen(r'/root/UlordChain/src/ulord-cli getrawtransaction 05b78f5e4896fd72518b1b855b58fb23e36721799a50913796aba854de1bcc17 1',shell=True, close_fds=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
      r'/root/UlordChain/src/ulord-cli getrawtransaction 05b78f5e4896fd72518b1b855b58fb23e36721799a50913796aba854de1bcc17 1'  你要执行的外部第三方的命令,也可以是shell程序。
      shell=True, close_fds=True  close_fds是如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。
      
    stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄。
    stdout, stderr = p.communicate()        无限等待上面命令的执行的结果,知道命令执行完毕
    returncode = p.returncode()           获取命令执行返回的特征码,0即执行成功。

      

    2.不管是shell还是外部第三方程序执行后进行解析操作。

    首先如果返回值是一个json字符串,这样就很方便方便你提取其中的某个数据,如果返回值不是json字符串,通过json.loads()函数的转换,你就会获取到一个json字符串。

    raw_data是最原始的命令返回值,通过loads()转换python对象。通过get函数进行提取,如果不熟悉,可以分步提取,先提取出想要的键,再根据键来提取值,熟练之后就可以一步到位了。

  • 相关阅读:
    现实世界的Windows Azure:采访Gridsum的Sr.业务发展总监Yun Xu
    现在可用——Windows Azure SDK 1.6
    Rock Paper Azure Challenge回来啦
    这几天比较忙,自己的职业生涯规划好了吗?目标又是什么呢?生活在十字路口。。。。。。
    GDI+ 学习记录(24): 输出文本<3>
    GDI+ 学习记录(30): MetaFile 文件操作
    GDI+ 学习记录(29): 区域 Region
    GDI+ 学习记录(26): 显示图像 Image
    GDI+ 学习记录(25): 变换 Transform
    返回整数的四种情况
  • 原文地址:https://www.cnblogs.com/AlfredZKY/p/9854767.html
Copyright © 2011-2022 走看看