GVKun编程网logo

在Python中顺序执行命令?(python 顺序执行)

22

以上就是给各位分享在Python中顺序执行命令?,其中也会对python顺序执行进行解释,同时本文还将给你拓展eval()python怎么把字符串变成可执行命令?、python案例远程执行命令、Pyt

以上就是给各位分享在Python中顺序执行命令?,其中也会对python 顺序执行进行解释,同时本文还将给你拓展eval() python怎么把字符串变成可执行命令?、python 案例远程执行命令、Python 简单的远程执行命令、python 简易执行命令模块等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

在Python中顺序执行命令?(python 顺序执行)

在Python中顺序执行命令?(python 顺序执行)

我想连续执行多个命令:

即(只是为了说明我的需要):

cmd (贝壳)

然后

cd dir

ls

并读取的结果ls

subprocess模块有任何想法吗?

更新:

cddirls只是一个例子。我需要运行复杂的命令(遵循特定的顺序,没有任何流水线操作)。实际上,我想要一个子进程外壳,并希望能够在其上启动许多命令。

答案1

小编典典

有一种简单的方法可以执行一系列命令。

在以下使用 subprocess.Popen

"command1; command2; command3"

或者,如果您陷在Windows中,则有多种选择。

  • 创建一个临时的“ .BAT”文件,并将其提供给 subprocess.Popen

  • 在单个长字符串中创建带有“ \ n”分隔符的命令序列。

像这样使用“”。

"""command1command2command3"""

或者,如果您必须零碎地做某事,则必须做这样的事情。

class Command( object ):    def __init__( self, text ):        self.text = text    def execute( self ):        self.proc= subprocess.Popen( ... self.text ... )        self.proc.wait()class CommandSequence( Command ):    def __init__( self, *steps ):        self.steps = steps    def execute( self ):        for s in self.steps:            s.execute()

这将允许您构建一系列命令。

eval() python怎么把字符串变成可执行命令?

eval() python怎么把字符串变成可执行命令?

>>>x = 7
>>> eval( ''3 * x'' )
21
>>> eval(''pow(2,2)'')
4
>>> eval(''2 + 2'')
4
>>> n=81
>>> eval("n + 4")
85

 

 

用eval()来解决这个问题,我看了很多eval的资料都没有说到eval()可以把字符串变成可执行代码的作用。最后贴上代码

main.py

从log.cfg传过来的字符串直接当代码使用了。

python 案例远程执行命令

python 案例远程执行命令

------ 类似于 cmd 的功能,client 执行命令,server 发命令结果发送到 client

-----------server.py-------------------

import subprocess
#subprocess.Popen,主要用Popen这个类实现shell

import socket
sk=socket.socket()
print(sk)
address=(''127.0.0.1'',8003)
sk.bind(address)
sk.listen(3)
print(''waiting.....'')
while True:
conn,addr = sk.accept()
print(addr)
while True:
try:
data = conn.recv(1024)
except Exception:
break
if not data: break
print(''.....'', str(data, ''utf8''))
obj=subprocess.Popen(str(data,''utf8''),shell=True,stdout=subprocess.PIPE)
#stdout=subprocess.PIPE表示通过管道PIP由你的子进程转到我主进程并封装到obj对象里
     ----即这一行和下面这一行的功能就是把client发来指令的结果解出来
        cmd_result=obj.stdout.read()
result_len=bytes(str(len(cmd_result)),''utf8'') #算出它的大小
conn.sendall(result_len) #把这个大小的数字传给client

conn.recv(1024)

conn.sendall(bytes(cmd_result))
sk.close()


-----------------------------client.py-------------------------------
import socket
sk=socket.socket()
print(sk)
address=(''127.0.0.1'',8003)
sk.connect(address)
while True:
inp=input(''>>>'')
if inp == ''exit'':
break
sk.send(bytes(inp,''utf8''))

result_len=int(str(sk.recv(1024),''utf8''))

sk.sendall(bytes(''111'',''utf8''))

print(result_len)
data=bytes()
while len(data) != result_len:
recv= sk.recv(1024)
data+=recv

print(str(data,''gbk''))
sk.close()


结果如下图:client执行diripconfig等命令能拿到结果






Python 简单的远程执行命令

Python 简单的远程执行命令

client端执行命令,server端返回命令结果

# server 端
import socket, subprocess

sk = socket.socket()
address=(''127.0.0.1'', 8000)
sk.bind(address)
sk.listen(3)
print(''waiting....'')

while 1:
    conn, addr = sk.accept()
    print(addr)
    while 1:
        try:
            data = conn.recv(1024)
        except Exception:
            break
        if not data: break
        print(''.........'', str(data, ''utf8''))

        obj = subprocess.Popen(data.decode(''utf8''), shell=True, stdout=subprocess.PIPE)
        cmd_result = obj.stdout.read()
        result_len = bytes(str(len(cmd_result)), ''utf8'')
        print(''>>>>>>'', result_len)
        conn.sendall(result_len)
        conn.recv(1024)              # 预防粘包现象
        conn.sendall(cmd_result)

sk.close()

# client 端
import socket

sk = socket.socket()
print(sk)

address = (''127.0.0.1'', 8000)
sk.connect(address)

while True:
    inp = input(''>>>'')
    if inp == ''exit'':
        break
    sk.send(bytes(inp, ''utf8''))
    result_len = int(str(sk.recv(1024), ''utf8''))
    sk.sendall(bytes(''ok'', ''utf8''))
    print(result_len)
    data = bytes()
    while len(data) != result_len:
        recv = sk.recv(1024)
        data += recv
    print(str(data, ''gbk''))
sk.close()

python 简易执行命令模块

python 简易执行命令模块

import os
import subprocess
from logging import getLogger

logger = getLogger(__name__)

class ExecuteCommand(object):
    """执行 命令行

    使用上下文管理器, 执行前会进入实例化对象时传入的路径, 完成后退回实例化前时的工作目录
    调用exec方法是也可传入路径, 函数结束后会退回调用exec前的目录"""

    def __init__(self, wd=''.''):
        self.wd = os.path.normpath(os.path.abspath(wd))
        self.init_dir = os.getcwd()

    def exec(self, cmd, wd=None):
        """执行命令
         wd不为None, 先进入目录 wd, 执行, 退回原self.wd
        """
        cwd = os.getcwd()
        if wd is not None:
            os.chdir(os.path.normpath(os.path.abspath(wd)))
        logger.info(''在路径-%s-下, 执行命令-%s-!'' % (os.getcwd(), cmd))
        result = subprocess.getstatusoutput(cmd)
        os.chdir(cwd)
        return result

    # 执行 context_expression,生成上下文管理器 context_manager
    # 调用上下文管理器的 __enter__() 方法;如果使用了 as 子句,则将 __enter__() 方法的返回值赋值给 as 子句中的 target(s)
    # 执行语句体 with-body
    # 不管是否执行过程中是否发生了异常,执行上下文管理器的 __exit__() 方法,__exit__() 方法负责执行“清理”工作,如释放资源等
    # 如果执行过程中没有出现异常,或者语句体中执行了语句 break/continue/return,则以 None 作为参数调用 __exit__(None, None, None)
    # 如果执行过程中出现异常,则使用 sys.exc_info 得到的异常信息为参数调用 __exit__(exc_type, exc_value, exc_traceback)
    # 出现异常时,如果 __exit__(type, value, traceback) 返回 False,则会重新抛出异常,让with 之外的语句逻辑来处理异常,这也是通用做法;如果返回 True,则忽略异常,不再对异常进行处理
    def __enter__(self):
        """进入 self.wd目录"""
        os.chdir(self.wd)
        logger.info(''进入目录-%s-'' % self.wd)
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        """退回self.init_dir目录"""
        os.chdir(self.init_dir)
        logger.info(''退回目录-%s-'' % self.init_dir)
        if exc_tb is None:
            return True
        else:
            return False

 

关于在Python中顺序执行命令?python 顺序执行的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于eval() python怎么把字符串变成可执行命令?、python 案例远程执行命令、Python 简单的远程执行命令、python 简易执行命令模块的相关知识,请在本站寻找。

本文标签: