1

subprocess.Popenを使用して外部プログラムを開始し、process.kill()を使用して、開始するとすぐにそれを強制終了するスクリプトがあります。スクリプトがWindowsエラー[5](アクセス拒否)を強制終了しようとするたびに、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 に答える