返回顶部
首页 > 资讯 > 后端开发 > Python >python中执行shell命令的几个方
  • 917
分享到

python中执行shell命令的几个方

几个命令python 2023-01-31 07:01:31 917人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

最近有个需求就是页面上执行shell命令,第一想到的就是os.system, 代码如下: os.system('cat /proc/cpuinfo') 但是发现页面上打印的命令执行结果 0或者1,当然不满足需求了。 尝试第二种方

最近有个需求就是页面上执行shell命令,第一想到的就是os.system,
代码如下:

os.system('cat /proc/cpuinfo')

但是发现页面上打印的命令执行结果 0或者1,当然不满足需求了。

尝试第二种方案 os.popen()
代码如下:

output = os.popen('cat /proc/cpuinfo')
print output.read()

通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出。但是无法读取程序执行的返回值)

尝试第三种方案 commands.getstatusoutput() 一个方法就可以获得到返回值和输出,非常好用。
代码如下:

(status, output) = commands.getstatusoutput('cat /proc/cpuinfo')
print status, output

python Document 中给的一个例子

>>> import commands
>>> commands.getstatusoutput('ls /bin/ls')
(0, '/bin/ls')
>>> commands.getstatusoutput('cat /bin/junk')
(256, 'cat: /bin/junk: No such file or directory')
>>> commands.getstatusoutput('/bin/junk')
(256, 'sh: /bin/junk: not found')
>>> commands.getoutput('ls /bin/ls')
'/bin/ls'
>>> commands.getstatus('/bin/ls')
'-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'

最后页面上还可以根据返回值来显示命令执行结果。

subprocess

可以执行shell命令的相关模块和函数有:

os.system
os.spawn
os.popen –废弃
popen2.* –废弃
commands.* –废弃,3.x中被移除

例子

基本用法和commands模块类似,只是没有getstatus对象


>>> subprocess.getstatusoutput('pwd')
(0, '/home/ronny')
>>> subprocess.getoutput('pwd')
'/home/ronny'
>>> subprocess.getstatus('pwd')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'subprocess' has no attribute 'getstatus'

以上执行shell命令的相关的模块和函数的功能均在 subprocess 模块中实现,并提供了更丰富的功能。

更丰富的功能

(1) call

执行命令,返回状态码(命令正常执行返回0,报错则返回1)

ret1=subprocess.call("ifconfig")
ret2=subprocess.call("ipconfig")    #python3.5不是这样,依然会抛出异常导致无法对ret2赋值
print(ret1)     #0
print(ret2)     #1


ret = subprocess.call(["ls", "-l"], shell=False)    #shell为False的时候命令必须分开写
ret = subprocess.call("ls -l", shell=True)

(2) check_call

执行命令,如果执行成功则返回状态码0,否则抛异常


subprocess.check_call(["ls", "-l"])
subprocess.check_call("exit 1", shell=True)

(3) check_output

执行命令,如果执行成功则返回执行结果,否则抛异常


subprocess.check_output(["echo", "Hello World!"])
subprocess.check_output("exit 1", shell=True)

(4) subprocess.Popen(…)

用于执行复杂的系统命令
参数 注释
args shell命令,可以是字符串或者序列类型(如:list,元组)
bufsize 指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲
stdin, stdout, stderr 分别表示程序的标准输入、输出、错误句柄
preexec_fn 只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
close_sfs 在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。
shell 同上
cwd 用于设置子进程的当前目录
env 用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
universal_newlines 不同系统的换行符不同,True -> 同意使用 \n
startupinfo 只在windows下有效,将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等
createionflags 同上

import subprocess
ret1 = subprocess.Popen(["mkdir","t1"])
ret2 = subprocess.Popen("mkdir t2", shell=True)

终端输入的命令分为两种:

输入即可得到输出,如:ifconfig
输入进行某环境,依赖再输入,如:Python
import subprocess

obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',)     #在cwd目录下执行命令

import subprocess

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
obj.stdin.write("print(1)\n")
obj.stdin.write("print(2)")
obj.stdin.close()

cmd_out = obj.stdout.read()
obj.stdout.close()
cmd_error = obj.stderr.read()
obj.stderr.close()

print(cmd_out)
print(cmd_error)
import subprocess

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
obj.stdin.write("print(1)\n")
obj.stdin.write("print(2)")

out_error_list = obj.communicate()
print(out_error_list)

import subprocess

obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
out_error_list = obj.communicate('print("hello")')
print(out_error_list)

--结束END--

本文标题: python中执行shell命令的几个方

本文链接: https://lsjlt.com/news/191296.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python中执行shell命令的几个方
    最近有个需求就是页面上执行shell命令,第一想到的就是os.system, 代码如下: os.system('cat /proc/cpuinfo') 但是发现页面上打印的命令执行结果 0或者1,当然不满足需求了。 尝试第二种方...
    99+
    2023-01-31
    几个 命令 python
  • python 执行 shell命令 的几
        os.system 最近有个需求就是页面上执行shell命令,第一想到的就是os.system os.system('cat /proc/cpuinfo') 但是发现页面上打印的命令执行结果 0 或者 1,当然不满足需求了。 ...
    99+
    2023-01-31
    命令 python shell
  • python执行shell命令的方法
    os模块os.system方式:import os os.system('top') os.system('cat /proc/cpuinfo')说明这个调用相当直接,且是同步进行的,程序需要阻塞并等待返回。返回值是依赖于系统的,直接返回系...
    99+
    2023-01-31
    命令 方法 python
  • js执行shell命令的几种方式(Node)
    目录前言调起shell的几种方式介绍(不限于这几种)1、child_process2、shelljs3、simple-git总结在做一个客户端基建项目的时候,多处需要用到JS调取命令...
    99+
    2024-04-02
  • python之执行shell命令
    [root@s141 ~]# python Python 2.7.5 (default, Sep 15 2016, 22:37:39)  [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2 Ty...
    99+
    2023-01-31
    命令 python shell
  • python 之 shell命令执行
    python中有几种常用的执行shell命令的模块1,os.system()2, os.popen()3,pexpect.run()下面介绍3个模块的差别1,os.system() 直接执行>>> os.system('l...
    99+
    2023-01-31
    命令 python shell
  • python怎么执行shell命令
    在Python中可以使用`os`模块中的`system`函数来执行Shell命令。以下是一个示例:```pythonimport o...
    99+
    2023-09-27
    python shell
  • Python 执行Shell 外部命令
    1、os.system()此方法执行的外部程序,会将结果直接输出到标准输出。os.system的返回结果为执行shell 的 $ 值。因此请执行没有输出结果的程序时适合使用此方法。如touch 、rm 一个文件等。In [1]: impor...
    99+
    2023-01-31
    命令 Python Shell
  • Python中执行系统命令常见的几种方法
      Python中执行系统命令常见的几种方法:   (1)os.system   # 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息  # 如果再命令行下执行,结果直接打印出来  例如:  >>> impor...
    99+
    2023-01-31
    几种方法 命令 常见
  • Java执行shell命令
    Java执行shell命令 前言一、案例场景原因解决方案 二、拓展创建临时脚本,执行shell命令 三、总结 前言 java执行shell命令的方式有很多种,但是在应...
    99+
    2023-09-05
    java 开发语言 linux
  • python执行使用shell命令方法分享
    1. os.system(shell_command) 直接在终端输出执行结果,返回执行状态0,1 此函数会启动子进程,在子进程中执行command,并返回command命令执行完毕后的退出状态,如果com...
    99+
    2022-06-04
    命令 方法 python
  • Linux命令行循环执行shell命令
    目录linux命令行,循环执行shell命令死循环命令格式效果普通计数循环循环10次效果LLinux命令行,循环执行shell命令 死循环 命令格式 while true ;do <command>; don...
    99+
    2023-01-03
    linuxshell循环执行命令 循环执行shell命令 linux命令行 Linuxshell循环命令 while死循环
  • Android中执行java命令的方法及java代码执行并解析shell命令
    android中执行java命令的方法大家都晓得吗,下面一段内容给大家带来了具体解析。 android的程序基于java开发,当我们接上调试器,执行adb shell,就可以...
    99+
    2022-06-06
    JAVA 方法 shell Android
  • shell命令行模式中如何执行mongo命令
    小编给大家分享一下shell命令行模式中如何执行mongo命令,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • nodejs脚本中执行shell命令
    nodejs脚本中执行shell命令 官方文档一:exec 方法执行shell命令1. _注意:2. _优点特性:3. _语法格式:4. _option对象属性:5. _示例: 二:spa...
    99+
    2023-08-31
    linux unix 服务器
  • JavaJSch远程执行Shell命令的方法
    目录背景JSch简介使用示例需要注意的点参考文档背景 项目需求,需要远程 ssh 登录到某个节点执行 shell 命令来完成任务。对于这种需求,如果不用 java 程序,直接 lin...
    99+
    2024-04-02
  • Java执行shell命令的实现
    目录前言一、案例场景原因解决方案二、拓展三、总结前言 java执行shell命令的方式有很多种,但是在应用的过程中,我们可能会遇上一些特殊的情况,导致执行脚本失败,不生效的场景。 一...
    99+
    2023-01-12
    Java执行shell
  • shell命令怎么在docker中执行
    这篇文章将为大家详细讲解有关shell命令怎么在docker中执行,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在docker中执行shell命令,需要在命令前增加sh -c,例如:dock...
    99+
    2023-06-14
  • 在Laravel中如何执行Shell命令
    这篇文章主要介绍在Laravel中如何执行Shell命令,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!shell_exec() 和 exec() 都可以执行 shell 命令。如果你的命令不知道因为什么原因而崩溃,你...
    99+
    2023-06-21
  • MobaXterm多个窗口同时执行shell命令
    背景 项目中需要两个系统时间同步,我想自己简单的测试下程序是不是正常,最直观的想法是同时在两个系统里执行date命令,看两个命令的差值是不是在合理范围之内 所以简单记录下使用MobaXterm远程连接服务器时,在两个窗口中同时执行shell...
    99+
    2023-09-15
    服务器 ssh 运维
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作