Python 停止脚本中的命令行命令
我正在编写一个脚本,希望能够在其中运行命令行命令,可能是使用os.system(“stuff”)。但如果我的命令不能自行结束呢?就像,通常在我的终端我必须ctl+C来结束它。有没有一种方法可以让我运行它、停止它并获取输出 我确信一定会有,但我不知道,我也不确定我是否知道找到它的正确术语(我所有的Python都是通过实验自学的) 谢谢 os.system()不返回由它生成的子shell的控制,而是在子shell执行完命令后只返回退出代码。这可以通过以下方式进行验证:Python 停止脚本中的命令行命令,python,linux,python-3.x,ubuntu,Python,Linux,Python 3.x,Ubuntu,我正在编写一个脚本,希望能够在其中运行命令行命令,可能是使用os.system(“stuff”)。但如果我的命令不能自行结束呢?就像,通常在我的终端我必须ctl+C来结束它。有没有一种方法可以让我运行它、停止它并获取输出 我确信一定会有,但我不知道,我也不确定我是否知道找到它的正确术语(我所有的Python都是通过实验自学的) 谢谢 os.system()不返回由它生成的子shell的控制,而是在子shell执行完命令后只返回退出代码。这可以通过以下方式进行验证: x = os.system("
x = os.system("echo 'shankar'")
print(x)
您需要的是子流程
库。
您可以使用subprocess.Popen()
函数启动子流程。此函数将子流程的控制作为一个对象返回,可以对该对象进行操作以控制子流程
子流程模块为生成新流程和检索其结果提供了更强大的工具
运行它:
import subprocess
proc = subprocess.Popen(['foo', 'bar', 'bar'], stdout=subprocess.PIPE, shell=True)
proc.terminate() # terminate the process.
out, err = proc.communicate()
这里的proc
是返回的对象,它提供对生成的子流程的控制。您可以检索有关进程的信息,也可以使用此对象对其进行操作
proc.pid # returns the id of process
停下来:
import subprocess
proc = subprocess.Popen(['foo', 'bar', 'bar'], stdout=subprocess.PIPE, shell=True)
proc.terminate() # terminate the process.
out, err = proc.communicate()
Popen.terminate()
您可以使用Popen.communicate()
函数获取输出
获取输出:
import subprocess
proc = subprocess.Popen(['foo', 'bar', 'bar'], stdout=subprocess.PIPE, shell=True)
proc.terminate() # terminate the process.
out, err = proc.communicate()
注意:Popen.communicate()
仅当子进程已成功退出或已终止或终止时返回输出。os.system()不返回由其生成的子shell的控制,而仅在子shell执行完命令后返回退出代码。这可以通过以下方式进行验证:
x = os.system("echo 'shankar'")
print(x)
您需要的是子流程
库。
您可以使用subprocess.Popen()
函数启动子流程。此函数将子流程的控制作为一个对象返回,可以对该对象进行操作以控制子流程
子流程模块为生成新流程和检索其结果提供了更强大的工具
运行它:
import subprocess
proc = subprocess.Popen(['foo', 'bar', 'bar'], stdout=subprocess.PIPE, shell=True)
proc.terminate() # terminate the process.
out, err = proc.communicate()
这里的proc
是返回的对象,它提供对生成的子流程的控制。您可以检索有关进程的信息,也可以使用此对象对其进行操作
proc.pid # returns the id of process
停下来:
import subprocess
proc = subprocess.Popen(['foo', 'bar', 'bar'], stdout=subprocess.PIPE, shell=True)
proc.terminate() # terminate the process.
out, err = proc.communicate()
Popen.terminate()
您可以使用Popen.communicate()
函数获取输出
获取输出:
import subprocess
proc = subprocess.Popen(['foo', 'bar', 'bar'], stdout=subprocess.PIPE, shell=True)
proc.terminate() # terminate the process.
out, err = proc.communicate()
注意:Popen.communicate()
仅当子进程已成功退出或已终止或终止时才返回输出。您可以设置一段时间或一个循环,如果条件为,则使用以下命令终止该进程:
os.kill(),要获取进程pid,请使用os.getpid()
您可以设置一段时间或一个循环,如果是条件,则使用以下方法终止进程:
os.kill(),要获取进程pid,请使用os.getpid()
您希望,可能与结合使用作为内存输出管道。可能是线程,但希望您可以避免它们。这有点棘手,但希望这能让您了解要查找的内容。您希望,可能与结合使用作为内存中的输出管道。可能是线程,但希望您可以避免它们。这有点棘手,但希望这能让你知道该找什么。