python调用linux命令行_python中执行linux命令(调用linux命令) - CSDN
精华内容
参与话题
  • python中执行linux命令(调用linux命令)

    万次阅读 2017-06-19 10:39:40
    #传参调用exe程序(解决相对路径,觉得路径问题),等待exe进程结束,此程序才结束。 # -*- coding: utf-8-*- import os, os.path, sys import win32process, win32event exe_path = sys.argv[1] exe_file = sys....
    #传参调用exe程序(解决相对路径,觉得路径问题),等待exe进程结束,此程序才结束。
    
    # -*- coding: utf-8-*-
    
    import os, os.path, sys
    import win32process, win32event
    
    exe_path = sys.argv[1]
    exe_file = sys.argv[2]
    
    #os.chdir(exe_path)
    
    try :
            handle = win32process.CreateProcess(os.path.join(exe_path, exe_file),
                    '', None, None, 0,
                    win32process.CREATE_NO_WINDOW,
                    None ,
                    exe_path,
                    win32process.STARTUPINFO())
            running = True       
    except Exception, e:
            print "Create Error!"
            handle = None
            running = False
    
    while running :
            rc = win32event.WaitForSingleObject(handle[0], 1000)
            if rc == win32event.WAIT_OBJECT_0:
                    running = False
    #end while
    print "GoodBye"
     

    #需要用的模块:pywin32-214.win32-py2.5.exe 

    把改程序做成exe程序,就可以任何地方调用了(windows系统下)。


    ===========================================================================

    两者均需 import os

    (1) os.system

    # 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息

    system(command) -> exit_status
    Execute the command (a string) in a subshell.

    # 如果再命令行下执行,结果直接打印出来

    >>> os.system('ls')
    04101419778.CHM   bash      document    media      py-django   video
    11.wmv            books     downloads   Pictures  python
    all-20061022      Desktop   Examples    project    tools

    (2) os.popen

    # 该方法不但执行命令还返回执行后的信息对象

    popen(command [, mode='r' [, bufsize]]) -> pipe
    Open a pipe to/from a command returning a file object.

    ---------------------------------------------------------------------

    p=os.popen('ssh 10.3.16.121 ps aux | grep MySQL')
    x=p.read()
    print x
    p.close()

    例如:

    >>>tmp = os.popen('ls *.py').readlines()
    >>>tmp
    Out[21]:
    ['dump_db_pickle.py ',
    'dump_db_pickle_recs.py ',
    'dump_db_shelve.py ',
    'initdata.py ',
    '__init__.py ',
    'make_db_pickle.py ',
    'make_db_pickle_recs.py ',
    'make_db_shelve.py ',
    'peopleinteract_query.py ',
    'reader.py ',
    'testargv.py ',
    'teststreams.py ',
    'update_db_pickle.py ',
    'writer.py ']

    好处在于:将返回的结果赋于一变量,便于程序的处理。

    (3)  使用模块subprocess

    >>> import subprocess
    >>> subprocess.call (["cmd", "arg1", "arg2"],shell=True)

    获取返回和输出:

    import subprocess
    p = subprocess.Popen('ls', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    for line in p.stdout.readlines():
        print line,
    retval = p.wait()
    (4)  使用模块commands模块

     import os
    
    import commands
    
    方法1)使用commands.getstatusoutput方法,这是一个神奇的方法,能够直接得到返回值以及命令输出。官网说明:http://docs.python.org/library/commands.html
    
            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方法

    >>> import commands
    >>> dir(commands)
    ['__all__', '__builtins__', '__doc__', '__file__', '__name__', 'getoutput', 'getstatus', 'getstatusoutput','mk2arg', 'mkarg']
    >>> commands.getoutput("date")
    'Wed Jun 10 19:39:57 CST 2009'
    >>>
    >>> commands.getstatusoutput("date")
    (0, 'Wed Jun 10 19:40:41 CST 2009')
    注意: 当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess,如果使用os.popen则会出现下面的错误:
    Traceback (most recent call last):
    File "./test1.py", line 56, in <module>
      main()
    File "./test1.py", line 45, in main
      fax.sendFax()
    File "./mailfax/Fax.py", line 13, in sendFax
      os.popen(cmd)
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 46-52: ordinal not in range(128)
    (5)使用模块pbs

    >>> import pbs
    
    >>> pbs.pwd()
    
    /var/log
    
    >>> pbs.hostname()
    
    waf-dev
    
    >>> pbs.ifconfig('eth1')
    
    eth1      Link encap:以太网  硬件地址 00:50:56:94:db:20
    
              inet 地址:182.168.1.1  广播:192.2.255.255  掩码:255.255.0.0
    
              inet6 地址: fe80::250:56ff:fe94:db20/64 Scope:Link
    
              UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
    
              接收数据包:3229133 错误:0 丢弃:0 过载:0 帧数:0
    
              发送数据包:2215454 错误:0 丢弃:0 过载:0 载波:0
    
              碰撞:0 发送队列长度:1000
    
              接收字节:452148544 (452.1 MB)  发送字节:1095951536 (1.0 GB)
    
    >>> pbs.ping('g.cn', c=3)
    
    PING g.cn (203.208.45.208) 56(84) bytes of data.
    
    64 bytes from 203.208.45.208: icmp_seq=1 ttl=48 time=13.1 ms
    
    64 bytes from 203.208.45.208: icmp_seq=2 ttl=48 time=12.4 ms
    
    64 bytes from 203.208.45.208: icmp_seq=3 ttl=48 time=11.6 ms
    
    --- g.cn ping statistics ---
    
    3 packets transmitted, 3 received, 0% packet loss, time 2003ms
    
    rtt min/avg/max/mdev = 11.675/12.430/13.125/0.593 ms

    ==========================================================================================


    1.1   os.system(command)

    在一个子shell中运行command命令,并返回command命令执行完毕后的退出状态。这实际上是使用C标准库函数system()实现的。这个函数在执行command命令时需要重新打开一个终端,并且无法保存command命令的执行结果。

    1.2   os.popen(command,mode)

    打开一个与command进程之间的管道。这个函数的返回值是一个文件对象,可以读或者写(由mode决定,mode默认是’r')。如果mode为’r',可以使用此函数的返回值调用read()来获取command命令的执行结果。

    os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容。实际使用时视需求情况而选择。

    1.3   commands.getstatusoutput(command)

      使用commands.getstatusoutput函数执行command命令并返回一个元组(status,output),分别表示command命令执行的返回状态和执行结果。对command的执行实际上是按照{command;} 2>&1的方式,所以output中包含控制台输出信息或者错误信息。output中不包含尾部的换行符。

    实例:

    >>>import commands

    >>> status, output = commands.getstatusoutput('ls -l')

    使用subprocess模块可以创建新的进程,可以与新建进程的输入/输出/错误管道连通,并可以获得新建进程执行的返回状态。使用subprocess模块的目的是替代os.system()、os.popen*()、commands.*等旧的函数或模块。

    2.1   subprocess.call(["some_command","some_argument","another_argument_or_path"])

    subprocess.call(command,shell=True)

    实例:

    handle = subprocess.call('ls -l', shell=True)

    2.2   subprocess.Popen(command, shell=True)

    如果command不是一个可执行文件,shell=True不可省。

      最简单的方法是使用class subprocess.Popen(command,shell=True)。Popen类有Popen.stdin,Popen.stdout,Popen.stderr三个有用的属性,可以实现与子进程的通信。 【linux公社 http://www.linuxidc.com 】

    将调用shell的结果赋值给python变量

    handle = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)

    实例:

    handle = subprocess.Popen('ls -l', stdout=subprocess.PIPE, shell=True)

    handle = subprocess.Popen(['ls','-l'], stdout=subprocess.PIPE, shell=True)

    handle = subprocess.Popen(args='ls -l', stdout=subprocess.PIPE, shell=True)

    print handle.stdout.read()

    print handle.communicate()[0]



    展开全文
  • 1.subprocess.call() import subprocess subprocess.call(["tshark", "-r", "ethernet-0-0.pcap", "-Tfields", "-e", "frame.time_epoch", "-e", "ip.src", "-e", "ip.dst", ">...", "linux.txt"]) 2. os.sys...

    1. subprocess.call()

    import subprocess

    subprocess.call(["tshark", "-r", "ethernet-0-0.pcap", "-Tfields", "-e", "frame.time_epoch", "-e", "ip.src", "-e", "ip.dst", ">", "linux.txt"])

     

    2. os.system

    import os

    os.system('tshark -r ethernet-0-0.pcap -Tfields -e frame.time_epoch -e ip.src -e ip.dst > linux.txt')

    展开全文
  • python脚本中执行Linux命令行

    千次阅读 2019-06-20 08:44:26
    常用模块 import os import subprocess os.system('free -h') subprocess.call('top')

    常用模块
     

    import os
    import subprocess
    
    os.system('free -h')
    subprocess.call('top')
    展开全文
  •  python 文件单独执行文件 注意要在终端中执行命令:python test.py os.system(cmd) 返回值为0:代表成功;1:代表失败 os.popen(cmd) 将执行结果返回,但是测试表示并没有,具体原因后期记得更新 连续执行多条...

    个人笔记:

     python 文件单独执行文件

    注意要在终端中执行命令:python test.py

    os.system(cmd)  返回值为0:代表成功;1:代表失败

    os.popen(cmd) 将执行结果返回,但是测试表示并没有,具体原因后期记得更新

    连续执行多条命令

    os.popen("cd.. && cd demo && touch 2.py ") 

    注意:

    1. 命令被分号“;”分隔,这些命令会顺序执行下去;
    2. 命令被“&&”分隔,这些命令会顺序执行下去,遇到执行错误的命令停止;
    3. 命令被双竖线“||”分隔,这些命令会顺序执行下去,遇到执行成功的命令停止,后面的所有命令都将不会执行;

    例子:

    目录结构:

    代码:

    import os
    
    if __name__ == '__main__':
        a = os.system("ls -a")#单独 os.system
        print(a)
        print("-----------------")
        a = os.popen("touch 8.java") #单独 os.popen
        print(a)
        print("-----------------")
        print(os.popen("cd.. && cd demo && touch 2.py ")) #连续执行三条命令
    

    结果:

     

    展开全文
  • python中执行命令行的方法

    万次阅读 2015-09-26 23:37:20
    该方法的参数就是string类型的命令,返回值方面,linux和windows上的返回值不同。linux上,返回值为执行命令的exit值;而windows上,返回值则是运行命令后,shell的返回值。注意,该方法是没办法得到运行命令的输出...
  • Linux终端中的操作均是使用命令行来进行的。因此,对于小白来说,熟记几个基本的命令行和使用方法能够较快的在Linux命令行环境中将python用起来。
  • 命令行中运行python文件中的函数

    万次阅读 2018-07-23 10:37:04
    以前在命令行中运行python都是运行整个.py文件,今天需要只运行其中一个函数。看到网上的方法说要先import文件才能调用函数,试过仍不成功。后来找到原因,是要在.py文件所在的目录下运行python才能improt。 就...
  • Linux下使用命令行调试Python程序

    万次阅读 2016-08-15 15:44:26
    Python提供类似于C++ gdb的调试工具pdb,我们可以在Linux下使用pdb在命令行下进行Python程序的调试。 官方参考网站: Python2: https://docs.python.org/2/library/pdb.html Python3: ...
  • linux终端(terminal)中执行python文件

    万次阅读 多人点赞 2017-03-06 09:48:58
    linux终端(terminal)中执行python文件
  • Python 3(11)调用系统命令行

    万次阅读 2018-02-22 11:49:42
    Python3 入门专栏http://blog.csdn.net/column/details/19679.html调用 OS 命令行python调用 os 的命令行,有以下几方法:os.system(command)类似 C 中的 system() 函数,command 为os命令;返回值在不同os上不同...
  • anaconda 通过命令行执行 python 文件

    万次阅读 2017-12-05 17:23:13
    win10 中 anaconda 通过命令行执行 python 文件点击三角按钮,在跳出的菜单栏中选择 Open Terminal通过 python 文件名.py 执行
  • 命令行调试Python程序

    千次阅读 2018-03-27 20:39:57
    转载地址:https://blog.csdn.net/theonegis/article/details/52211799Python提供类似于C++ gdb的调试工具pdb,我们可以在Linux下使用pdb在命令行下进行Python程序的调试。 官方参考网站: Python2: ...
  • python 命令行带参数执行方式

    千次阅读 2019-07-26 08:44:05
    Python命令行带参数的执行方式 -m:将标准库中的模块作为脚本去执行 在python2.x中启动一个CGI web 服务器 python -m CGIHTTPServer [port] 启动一个web服务,使用浏览器查看pydoc文档 python -m pydoc -p8080 ...
  • 命令行执行python模块时提示包找不到的问题

    万次阅读 热门讨论 2014-05-11 21:47:08
    庄稼人不是专职python开发的道友,虽然与python相识已多年,可惜相识不相知,只是偶尔借助pydev写一些简单的小工具。 多年来,一直困惑于这样一个问题:同样的工程,同样的代码,使用pydev可以运行任意一个python...
  • import matplotlib.pyplot as pltplt.imshow(img)命令行运行了之后却没有显示图片,这种情况下需要调用pylab包。import matplotlib.pyplot as plt import pylabplt.imshow(img) pylab.show()具体原因可以看...
  • Python命令行输入参数运行.py程序

    千次阅读 2018-12-17 14:07:02
    在运维过程中,有些时候需要向main函数中传递参数,以方便运维与测试,那么怎么向main函数中传入多个参数呢,下面以python3中的main函数为例,简单讲一下。 首先我们需要import sys,sys是python3的一个标准库,也...
  • vim调用python格式化json数据

    千次阅读 2014-04-25 11:15:35
    http://openwares.net/linux/vim_call_python_format_json.html python有个标准模块叫json,用于编码/解码,序列化/按序列化json格式数据。...可以使用vim调用python json模块提供的命令行工具json/tool.p
  • 用C#调用命令行运行Python文件

    千次阅读 2017-12-18 13:32:14
    第一次运行的时候会请求Python路径,需要手动定位python.exe的位置 /// /// C#里运行Python文件 /// /// 要运行的python文件 /// 参数</param
  • 命令行中执行python,提示提示No module named "xxx" 问题: 用JetBrains写了一个python程序,运行scheduleWindow.py,在JetBrains中可以正确执行, 然而用命令行执行的时候始终提示15行error,...
  • Ubuntu 命令行中用 GPU 运行 Python 程序

    千次阅读 2018-05-22 10:58:02
    在终端执行 Python 程序时可以使用下面的命令: CUDA_VISIBLE_DEVICES=1 python your_file.py 这样在跑你的网络之前,告诉程序只能看到1号GPU,其他的GPU它不可见 可用的形式如下: CUDA_VISIBLE_DEVICES=1 # ...
1 2 3 4 5 ... 20
收藏数 41,620
精华内容 16,648
关键字:

python调用linux命令行