1

我有一个脚本,我在其中使用 subprocess.Popen 来启动一个外部程序,并在它启动后就使用 process.kill() 来杀死它。每次脚本试图杀死它时,我都会收到 Windows 错误 [5](拒绝访问)。我意识到程序的 pid 在打开后实际上正在发生变化。有没有办法在 Python 中监视更改的过程,或者只检索新的 pid?

这是代码:

import subprocess
import time

proc  =  subprocess.Popen(Path/to/WinSCP.exe)
time.sleep(2)
proc.kill()

错误:

Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "C:\Path", line 231, in __call__
self.scpsetup()
File "C:\Path", line 329, in scpsetup
proc.kill()
File "C:\Python27\lib\subprocess.py", line 1019, in terminate
_subprocess.TerminateProcess(self._handle, 1)
WindowsError: [Error 5] Access is denied
4

1 回答 1

2

这就是我最终要做的;

import tempfile
import subprocess
import time

# Create a temp file to receive output
tf      =  tempfile.NamedTemporaryFile(delete=False)
output  =  open(tf.name, "w")

# Open and close WinSCP
subprocess.Popen(Path/To/WinSCP.exe)
time.sleep(2)
subprocess.call("TASKKILL /IM WinSCP.exe", stdout=output)
tf.close()

我以前用这种方法遇到的问题是我无法隐藏命令的输出。这可能不是完成此任务的最漂亮方法,但它确实有效。

另请注意,我使用的是 Windows 8。我了解命令本身在不同版本的 Windows 中可能略有不同。

于 2013-03-26T14:16:08.307 回答