子流程.Popen pid变化



我有一个使用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:Python27liblib-tkTkinter.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:Python27libsubprocess.py", line 1019, in terminate
_subprocess.TerminateProcess(self._handle, 1)
WindowsError: [Error 5] Access is denied

这就是我最后做的;

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中可能略有不同。

最新更新