1
我有一個腳本,我使用subprocess.Popen啓動一個外部程序,然後process.kill()在啓動時立即殺死它。每次腳本嘗試殺死它時,我都會收到Windows錯誤[5](訪問被拒絕)。我意識到程序的pid在打開後實際上正在改變。有沒有一種方法可以在Python中監視進程的變化,或者只是檢索新的pid?subprocess.popen pid change
下面是代碼:
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
該進程無法更改其PID。 – wRAR 2013-03-25 18:20:36
看看http://amoffat.github.com/sh。這就是我推薦在python中使用子進程的方式。其他方法可以解析ps -aux |的bash響應grep'process_name' – mihaicc 2013-03-25 18:21:31
外部程序是否啓動了一些您可以告訴我們的知名知識?聽起來好像你的啓動過程啓動了另一個過程。 @ viper33m在Windows下會出現'Windows Error [5]'這個錯誤的聲音,這將會導致'ps'和'grep'出現。 – BergmannF 2013-03-25 18:22:29