我收到的值为128,显示“未知错误”。这是我尝试过的事情,但我无法进入异常块。
还在控制台中得到:
错误:找不到进程“ NULL.exe”。
try:
tmp = os.system("c:/windows/system32/taskkill /f /im NULL.exe")
except OSError as e:
print("We made it into the excepetion!!" + str(e))
try:
tmp = os.system("c:/windows/system32/taskkill /f /im NULL.exe")
except OSError:
print("We made it into the excepetion!!")
try:
tmp = os.system("c:/windows/system32/taskkill /f /im NULL.exe")
except os.error:
print("We made it into the excepetion!!")
try:
tmp = os.system("c:/windows/system32/taskkill /f /im NULL.exe")
except ValueError:
print("We made it into the excepetion!!")
try:
tmp = os.system("c:/windows/system32/taskkill /f /im NULL.exe")
except:
print("We made it into the excepetion!!")
答案 0 :(得分:1)
os.system()
在命令失败(或找不到)时不会引发异常。当您使用错误的参数类型(它需要一个字符串)时,它只会引发异常。如果您确实需要例外,可以使用subprocess.call()
。
答案 1 :(得分:0)
当您的命令失败时Python不会拒绝,它只会捕获您刚运行的命令的返回码。 因此,您必须制定自定义期望并根据返回值提高它。 我用您的命令进行了一些实验。
这是错误代码,这里有我所发现的含义:
0-任务成功终止
1-拒绝访问
128-找不到进程
我针对您的问题的代码:
import os
#Making a custom Expection for ourselfs
class TaskkillError(Exception):
def __init__(self, value): #value is the string we will return when expection is raised
self.value = value
def __str__(self):
return repr(self.value)
tmp = os.system("c:/windows/system32/taskkill /f /im NULL.exe")
if tmp!=0:
if tmp==1:
raise TaskkillError('Acces denided') #Error code=1 Permission Error
if tmp==128:
raise TaskkillError("Process not found") #Error code=128 Process not found
else:
raise TaskkillError("UnknowError Error Code returned by taskkill:"+str(tmp))
else:
print("Task succesfully killed")
答案 2 :(得分:0)
好的,我终于弄清楚了,非常感谢您的帮助。我试图使用subprocess.run,call,check_output,check_call等。还有stderr等的不同参数。我还尝试捕获所读的每种错误。每次都向控制台抛出错误。在我的情况下,这是行不通的,因为我正在寻找32位和64位进程,因为他们知道每次都会失败。
最终我只需要使用Popen。通过使用Popen,我基本上可以将错误输入到PIPE中,而实际上我什至不需要try / except块。再次感谢您提供的所有帮助,这里是示例代码。
from subprocess import Popen, PIPE
bit32 = True
bit64 = True
p = Popen('c:windows/system32/taskkill /f /im notepad.exe', shell=True, stdout=PIPE,
stderr=PIPE)
output,error = p.communicate()
if (len(output) == 0):
print("32 bit not found")
bit32 = False
if (len(output) > 0):
print(output)
p = Popen('c:windows/system32/taskkill /f /im notepad64EXAMPLE.exe', shell=True,
stdout=PIPE, stderr=PIPE)
output,error = p.communicate()
if (len(output) == 0):
print("64 bit not found")
bit64 = False
if (len(output) > 0):
print(output)
if(not bit32 and not bit64):
print("Could not find 32/64 bit process")