python - 在脚本中停止命令行命令

标签 python linux python-3.x ubuntu

<分区>

我正在编写一个脚本,我希望能够在其中运行命令行命令,可能使用 os.system("stuff")。但是,如果我的命令没有自行结束怎么办?就像,通常在我的终端中我必须按 ctl+C 来结束它。有什么方法可以运行它、停止它并获取输出吗?

我确定一定有,但我不知道,而且我不确定我是否知道找到它的正确术语(我所有的 Python 都是通过实验自学的)

谢谢!

最佳答案

os.system() 不返回由它生成的子 shell 的控制权,而是在子 shell 执行完命令后仅返回退出代码。这可以通过以下方式验证:

x = os.system("echo 'shankar'")
print(x)

您需要的是subprocess 库。 您可以使用 subprocess.Popen() 函数来启动子进程。该函数将子进程的控制作为一个对象返回,该对象可以被操作以控制子进程。

子流程模块提供了更强大的工具来生成新流程并检索其结果。

运行它:

import subprocess 
proc = subprocess.Popen(['foo', 'bar', 'bar'], stdout=subprocess.PIPE, shell=True)

此处proc 是返回的对象,它提供对派生子进程的控制。您可以检索有关进程的信息或使用此对象对其进行操作。

proc.pid # returns the id of process

停止它:

proc.terminate() # terminate the process.

Popen.terminate() 相当于向子进程发送 ctrl+c (SIGTERM)。

您可以使用 Popen.communicate() 函数获取输出。

获取输出:

out, err = proc.communicate()

注意:Popen.communicate() 仅在子进程成功退出或终止或终止时返回输出。

关于python - 在脚本中停止命令行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37758227/

相关文章:

linux - QProcess 调用带有参数的 gksudo 用于调用脚本的个性化消息

python - 仅从python中的字符串变量中提取月份

python - 当if语句至少满足一次时,如何不执行for循环的else语句?

python - 通过 python 在 IMAP 中自定义标记消息

Python 特征工程师运动数据

python - 使用 Python Flask 检查 cookie

python - For循环只打印Python中的最后一个元素

c - 在 C (Linux) 中查找虚拟网络接口(interface)

c - Debian 上的 Daemonize() 问题

python - 用单个 for 遍历嵌套列表