【发布时间】:2017-05-02 21:56:07
【问题描述】:
我正在尝试使用子进程打开图像,以便用户可以看到它,然后关闭图像使其消失。
以前有人问过这个问题,但我找到的答案对我不起作用。这是我检查过的内容:
Killing a process created with Python's subprocess.Popen()
How to terminate a python subprocess launched with shell=True
How can I close an image shown to the user with the Python Imaging Library?
我需要代码来打开图像(使用预览(可选),默认在我的 Mac 上),稍等片刻,然后关闭图像。
openimg = subprocess.Popen(["open", mypath])
time.sleep(1)
openimg.terminate()
openimg.kill()
一切都在告诉我终止()和杀死(),但这仍然没有关闭图像。
这不必使用预览,我也愿意听取其他选项。
编辑:我还尝试了下面的代码,仍然没有成功
print('openimg\'s pid = ',openimg.pid)
os.kill(openimg.pid, signal.SIGKILL)
【问题讨论】:
-
我没有要检查的 Mac,但我似乎记得
open是异步的 - 它会生成一个预览进程(或它启动的任何应用程序)并立即退出。因此,当您的 Python 代码有一秒钟sleep'd 时,open进程不再存在。如果是这种情况,我想您需要找到某种方法向open启动的进程发送信号。作为测试,如果您将-W选项传递给open(可能与-n一起使用),那么它是否有效? -
感谢@DavidZ 的帮助,我有点新,我不知道如何在我的代码中包含“-W”或“-n”。我不断收到 Invalid Syntax 或 File Not Found 错误。你能给我举个例子吗?
-
让我写一个答案。
-
您或多或少地尝试使用 python 控制预览(在图像已经完成时关闭图像),所以这对于 mac os 来说非常具体。如果您想要一个更交叉兼容的程序,您应该使用
tkinter或类似的东西创建自己的图像查看器。
标签: python python-3.x subprocess kill terminate