1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python3: Shell 命令调用 执行 Shell 脚本

Python3: Shell 命令调用 执行 Shell 脚本

时间:2019-09-11 22:14:58

相关推荐

Python3: Shell 命令调用 执行 Shell 脚本

本文链接: /xietansheng/article/details/115559070

Python3 学习笔记(目录)

Python Shell 操作相关函数和类, Python Docs:

os.system(command)os.popen(cmd, mode=‘r’, buffering=-1)subprocess — Subprocess management

1. os.system()

函数原型:

# 在子 shell 中执行命令(字符串)。该函数是调用标准 C 函数 system() 来实现的,# 因此限制条件与该函数相同。对 sys.stdin 等的更改不会反映在执行命令的环境中。# command 产生的任何输出将被发送到解释器标准输出流。# 返回一个 int 类型的 code,一般返回 0 表示执行成功。os.system(command)

代码示例:

>>> import os>>> >>> result = os.system("python3 -V")Python 3.7.3>>> result0>>> os.system("python3 -V")Python 3.7.30

2. os.popen()

函数原型:

# 打开一个管道执行 cmd 命令, 返回值是连接到管道的 文件对象。# 只能和管道单向通讯, 返回值只能是 写入 或 读取 对象。# mode 为 'r', 表示返回的的是 读取对象, 可以对管道 read()、 readlines()# mode 为 'w', 表示返回的的是 写入对象, 可以对管道 write()、writelines()# 返回的文件对象只能读写字符串, 不能是字节类型。os.popen(cmd, mode='r', buffering=-1)

2.1 读取对象 代码示例:

文件: demo.py

print("hello world")

执行命令:

>>> import os>>> >>> fr = os.popen("python3 demo.py")>>> fr.read()'hello world\n'>>> fr.close()

2.2 写入对象 代码示例:

文件: demo.py

print("hello")s = input()print(s)print("world")

文件: app.py

import osfw = os.popen("python3 demo.py", mode="w")fw.write("你好")fw.close()

执行命令:

$ python3 app.pyhello你好world

3. 子进程管理: subprocess

subprocess模块允许你创建新的子进程,可以连接子进程输入、输出、错误 管道,并获取子进程的返回码。

Python 推荐使用subprocess.run()函数掉用子进程,更高级的用法也可以使用底层的class subprocess.Popen接口。

3.1 subprocess.run()

Python Docs: subprocess.run()

函数原型:

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None,capture_output=False, shell=False, cwd=None, timeout=None,check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None, **other_popen_kwargs)# 部分参数说明:## args: # 需要执行的命令, str 或 list/tuple 类型, 如果携带参数需要使用 list/tuple 类型, # 将命令以及每个参数组成 list/tuple, 例如: ["python3", "-m", "pip", "list"]## stdin, stdout, stderr:# 子进程的标准 输入、输出、错误输出## cwd:# 执行命令时的工作目录## timeout:# 超时时间, 超过该时间子进程还没有结束, 则杀掉子进程并抛出异常## env:# 为子进程设置环境变量, 字典类型, 默认继承自父进程## 等待命令执行完成后, 返回一个 pletedProcess 实例, # 可以通过 CompletedProcess.returncode 属性判断子进程的返回 Code。

代码示例:

>>> import subprocess>>> >>> r = subprocess.run("ls")aa_diraa.jpgaa.txt>>> r.returncode0>>> subprocess.run(["ls", "-l"])total 720drwxr-xr-x 3 xiets staff96 Oct 11 aa_dir-rw-r--r--@ 1 xiets staff 82182 Sep 18 09:56 aa.jpg-rw-r--r-- 1 xiets staff 64441 Sep 28 11:29 aa.txtCompletedProcess(args=['ls', '-l'], returncode=0)>>> >>> subprocess.run(["python3", "-m", "pip", "list"])Package Version---------- ---------pip 20.2.2setuptools 41.2.0CompletedProcess(args=['python3', '-m', 'pip', 'list'], returncode=0)>>>>>> subprocess.run("pwd", cwd="/Users")/UsersCompletedProcess(args='pwd', returncode=0)

3.2 subprocess.Popen

Python Docs:

构造方法: class subprocess.Popen实例方法: popen-objects

subprocess.Popen类构造方法:

class subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=None, startupinfo=None, creationflags=0, restore_signals=True,start_new_session=False, pass_fds=(), *, encoding=None, errors=None, text=None)# 部分参数说明:## args: # 需要执行的命令, str 或 list/tuple 类型, 如果携带参数需要使用 list/tuple 类型, # 将命令以及每个参数组成 list/tuple, 例如: ["python3", "-m", "pip", "list"]## stdin, stdout, stderr:# 子进程的标准 输入、输出、错误输出## cwd:# 执行命令时的工作目录## timeout:# 超时时间, 超过该时间子进程还没有结束, 则杀掉子进程并抛出异常## env:# 为子进程设置环境变量, 字典类型, 默认继承自父进程

subprocess.Popen实例的方法:

# 检查子进程是否已被终止, 如果终止则返回 returncode, 否则返回 NonePopen.poll()# 等待子进程被终止, 并返回 returncode, 可以指定等待时间, 超过则抛出异常Popen.wait(timeout=None)# 杀死子进程, 发送 SIGKILL 信号到子进程Popen.kill()# 发送 signal 信号到子进程Popen.send_signal(signal)# 与进程交互: 将数据发送到 stdin。从 stdout 和 stderr 读取数据, 直到到达文件末尾。# 等待进程终止并设置 returncode 属性。# 可选输入参数应该是要发送到子进程的数据, 如果没有数据要发送到子进程, 则为 None。# 如果以文本模式打开流,则输入必须为字符串。否则,它必须是字节。# 返回一个 (stdout_data, stderr_data) 元组。如果文件以文本模式打开则为字符串, 否则为字节。municate(input=None, timeout=None)# 停止子进程。在 POSIX 操作系统上, 该方法将 SIGTERM 发送给子进程。# 在Windows上, 将调用 Win32 API 函数 TerminateProcess()来停止子进程。Popen.terminate()# 传递给 Popen 的命令参数序列或字符串Popen.args# 子进程的标准输入Popen.stdin# 子进程的标准输出Popen.stdout# 子进程的错误输出Popen.stderr# 子进程的进程IDPopen.pid# 子进程的退出码, 由 poll() 和 wait() 设置(以及直接由 communicate() 设置)。# None 表示子进程还没有结束。Popen.returncode

代码示例:

import subprocessp = subprocess.Popen(["java", "-version"])p.wait()print(p.returncode)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。