以上就是给各位分享在Python中顺序执行命令?,其中也会对python顺序执行进行解释,同时本文还将给你拓展eval()python怎么把字符串变成可执行命令?、python案例远程执行命令、Pyt
以上就是给各位分享在Python中顺序执行命令?,其中也会对python 顺序执行进行解释,同时本文还将给你拓展eval() python怎么把字符串变成可执行命令?、python 案例远程执行命令、Python 简单的远程执行命令、python 简易执行命令模块等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- 在Python中顺序执行命令?(python 顺序执行)
- eval() python怎么把字符串变成可执行命令?
- python 案例远程执行命令
- Python 简单的远程执行命令
- python 简易执行命令模块
在Python中顺序执行命令?(python 顺序执行)
我想连续执行多个命令:
即(只是为了说明我的需要):
cmd
(贝壳)
然后
cd dir
和
ls
并读取的结果ls
。
对subprocess
模块有任何想法吗?
更新:
cddir
而ls
只是一个例子。我需要运行复杂的命令(遵循特定的顺序,没有任何流水线操作)。实际上,我想要一个子进程外壳,并希望能够在其上启动许多命令。
答案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怎么把字符串变成可执行命令?
>>>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 案例远程执行命令
------ 类似于 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执行dir和ipconfig等命令能拿到结果
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 简易执行命令模块
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 简易执行命令模块的相关知识,请在本站寻找。
本文标签: