<分区>
我正在编写一个脚本,我希望能够在其中运行命令行命令,可能使用 os.system("stuff")。但是,如果我的命令没有自行结束怎么办?就像,通常在我的终端中我必须按 ctl+C 来结束它。有什么方法可以运行它、停止它并获取输出吗?
我确定一定有,但我不知道,而且我不确定我是否知道找到它的正确术语(我所有的 Python 都是通过实验自学的)
谢谢!
<分区>
我正在编写一个脚本,我希望能够在其中运行命令行命令,可能使用 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/