python shell 交互 subprocess模块


一、subprocess 子进程管理模块

subprocess 模块是python官方在3.5版本之后推崇的,用于替代之前的老旧模块与功能。

模块主要介绍以官方文档为主:https://docs.python.org/zh-cn/3/library/subprocess.html#

os.system
os.spawn*

subprocess的主要方法

import subprocess

print(dir(subprocess))

>>>['CalledProcessError', 'CompletedProcess', 'DEVNULL', 'PIPE', 'Popen', 'STDOUT', 'SubprocessError', 'TimeoutExpired', '_PIPE_BUF', '_PLATFORM_DEFAULT_CLOSE_FDS', '_PopenSelector', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_active', '_args_from_interpreter_flags', '_cleanup', '_mswindows', '_optim_args_from_interpreter_flags', '_posixsubprocess', '_time', 'builtins', 'call', 'check_call', 'check_output', 'errno', 'getoutput', 'getstatusoutput', 'io', 'list2cmdline', 'os', 'run', 'select', 'selectors', 'signal', 'sys', 'threading', 'time', 'warnings']

subprocess.run
a = subprocess.run("ls", shell=True)  # 需要shell=True,不然错误状态下直接报错
print("func run")
print(type(a))
print(a)

>>>func run
>>><class 'subprocess.CompletedProcess'>
>>>CompletedProcess(args='ls', returncode=0)

run 方法的返回是一个CompletedProcess对象


subprocess.call/check_call
# a = subprocess.call("ls", shell=True)  # 需要shell=True,不然错误状态下直接报错
# print("func call")
# print(type(a))
# print(a)

a = subprocess.check_call("ls", stdout=False)
print("func check_call")
print(type(a))
print(a)

>>>func call
>>><class 'int'>
>>>0

>>>func check_call
>>><class 'int'>
>>>0

call方法和check_call方法均返回脚本回执码


subprocess.check_output
a = subprocess.check_output("ls")
print("func check_output")
print(type(a))
print(a)

>>>func check_output
>>><class 'bytes'>
>>>b'1 pd.py\n__init__.py\n__pycache__\nadmin.py\napps.py\nconstant.py\nmigrations\nmodels.py\nscript_event_trect.py\nserializer.py\nsubprocess_demo.py\ntasks.py\ntest1.py\ntests.py\nurls.py\nviews.py\n'

check_output方法返回butes类型输出


subprocess.getstatusoutput
a = subprocess.getstatusoutput("ll")
print("func getstatusoutput")
print(type(a))
print(a)

>>>func getstatusoutput
>>><class 'tuple'>
>>>(127, '/bin/sh: ll: command not found')

getstatusoutput方法返回回执码和输出,这个挺好用的


在执行“nohup”脚本时的注意事项:

code, out_put = subprocess.getstatusoutput("nohup python3 %s %s > %s" % (script_path, script.args, log_path))
  • 不能使用&,会导致无法捕获到异常状态码
  • 不能使用2>1 会导致无终端输出,仅有日志输出,从而无法捕获输出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: subprocess 模块Python 标准库中用于启动新的进程的模块。它可以用于执行外部命令、获取进程的输出、向进程发送输入、等待进程结束等操作。通过使用 subprocess 模块,可以在 Python 代码中更方便地控制外部程序,而不必编写额外的 shell 脚本。 ### 回答2: Pythonsubprocess模块是用于创建和管理新的子进程的模块。它提供了一个简单而灵活的方式来执行其他程序,并且可以与外部命令进行交互。 使用subprocess模块,我们可以启动一个新的进程,执行外部命令,并获取其输出。这对于需要执行其他语言编写的程序或者操作系统命令非常有用。通过subprocess模块,我们可以轻松地调用外部命令,并获取其标准输出、标准错误输出,以及执行的返回码。 subprocess模块提供了多种方法来创建并管理子进程,例如: - `subprocess.run()`:执行一个命令,等待其完成并返回运行结果。 - `subprocess.Popen()`:启动一个子进程,并返回一个Popen对象,可以通过该对象与子进程进行交互。 - `subprocess.call()`:执行一个命令,并等待其完成。与`subprocess.run()`类似,不过返回的是命令的返回码。 此外,subprocess模块还提供了一些方便的函数和常量,例如: - `subprocess.check_output()`:执行一个命令,并返回其标准输出。 - `subprocess.PIPE`:表示子进程的标准输入、输出和错误输出。 总而言之,subprocess模块是一个在Python中调用和管理外部命令和程序的强大工具。无论是执行其他语言编写的程序,还是与操作系统命令进行交互,它都提供了便捷的功能和灵活的方法。 ### 回答3: Python subprocess模块提供了一个简便的接口,可以在Python程序中启动和控制新的子进程。它允许我们在代码中运行外部命令,并可以通过输入和输出进行交互。 使用subprocess模块,我们可以执行系统命令、启动其他可执行文件、调用命令行工具等。它提供了多种方法,可以满足不同情况下的需求。 subprocess模块中最常用的函数是`subprocess.run()`。使用该函数可以方便地执行外部命令,并等待其完成。我们可以指定命令和参数,还可以设置输入和输出的方式。 在使用`subprocess.run()`函数时,可以通过`capture_output`参数捕获命令的输出,通过`input`参数传递输入数据。这使得我们可以在Python程序中方便地处理子进程的输出和输入。 `subprocess`模块还提供了其他函数,例如`subprocess.call()`、`subprocess.check_output()`等,可以实现不同的功能。另外,还可以通过`subprocess.Popen()`类来更灵活地控制子进程。 总而言之,Python subprocess模块提供了一个简单、方便和强大的接口,可以在Python程序中执行和控制子进程。它使得我们可以轻松地与外部命令进行交互,并处理输入输出。因此,subprocess模块在编写Python脚本时非常实用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值