Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 停止脚本中的命令行命令_Python_Linux_Python 3.x_Ubuntu - Fatal编程技术网

Python 停止脚本中的命令行命令

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("

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

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

谢谢

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.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()

您希望,可能与结合使用作为内存输出管道。可能是线程,但希望您可以避免它们。这有点棘手,但希望这能让您了解要查找的内容。您希望,可能与结合使用作为内存中的输出管道。可能是线程,但希望您可以避免它们。这有点棘手,但希望这能让你知道该找什么。