python调用OS.system结束进程问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python调用OS.system结束进程问题?相关的知识,希望对你有一定的参考价值。

在pycharm中使用指令:os.system('taskkill /IM dllhost.exe')结束某个进程,pycharm会自动打印以下消息:"成功: 给进程 'dllhost.exe' 发送了终止信号,进程的 PID 为 4776" , 请问如何不让其自动打印?

参考技术A os.system是执行命令,是否打印取决于命令是否有返回
如果你想不让其打印 可以在命令中做手脚如: os.system('taskkill /IM dllhost.exe > NUL')
参考技术B 没有办法把。os.system只是运行一个命令,而这个命令会导致什么结果是取决于这个命令的。打印的消息是命令本身发出的,所以你只要使用这个命令就没办法不返回。 参考技术C python调用OS.system结束进程问题
os.system调用程序放到后台,终止时kill掉它。
如在linux下:
os.system("my_program &")
os.system("pkill my_program")

如何结束作为 os.system() 调用运行的线程(Python)

【中文标题】如何结束作为 os.system() 调用运行的线程(Python)【英文标题】:How to end a thread running as os.system() call (Python) 【发布时间】:2016-04-22 16:58:43 【问题描述】:

我目前正在处理的项目适用于多个 os.system() 调用。我正在努力添加在后台运行这些调用的能力。这将启动一个新线程,调用 os.system() 并将所有输出重定向到 /dev/null。

问题是我想不出结束这些线程的最佳方法。当我在运行 os.system() 调用的线程上调用 .join() 时,系统调用只是接管了主线程。我希望用户能够终止这些线程。

我想到的解决方案是启动一个线程,然后让该线程在另一个线程中启动 os.system() 调用。第一个子线程将不断检查 True/False 值。但是后来我遇到了第一个子线程终止第二个子线程的问题,所以核心问题仍然存在。

这是我的代码现在的样机:

import threading
import os

def a():
    os.system('ping www.***.com > /dev/null')

threads = []

threads.append(threading.Thread(target=a))
threads[0].start()

#Continue doing other stuff

这里的问题是我无法想出一个稳定的方法来停止这些线程。

【问题讨论】:

***.com/questions/323972/… 这可能有用 我已经看到了,但问题是 os.system() 线程无法检查变量,因为它被调用占用了。 您的线程运行的os 方法是否实际上会永远运行,或者ping 只是一个例子?另外,您是否需要线程停止运行以使主线程继续运行,或者它们是否可以在主线程退出时退出? 是的。该项目是一组网络分析工具的管理器。它允许用户使用一组命令选择和运行工具。其中一些工具确实可以无限执行。 (Ping 只是一个例子)是的,我希望用户能够在他们想要的时候终止线程。 【参考方案1】:

听起来你可能能够使用守护进程,当所有其他非守护线程关闭时,它会自动停止。

for job in jobs_to_start:
  threads.append(threading.Thread(target=job))
  threads[-1].setDaemon(True)
  threads[-1].start()

您的主线程被os.system 调用“接管”,因为thread.join 正是这样做的:等待线程完成,而您的线程不会。

如果这对您不起作用,有一个good answer here,展示了如何使用subprocess.Popen 进行系统调用并使用terminate 停止它。

【讨论】:

以上是关于python调用OS.system结束进程问题?的主要内容,如果未能解决你的问题,请参考以下文章

python cmd命令调用

python cmd命令调用

python 多进程练习 调用 os.system命令

Python调用系统命令的6种方法

用 Python 结束外部程序

Python执行脚本方法