我遇到了一个主要问题:我无法访问不属于用户的(大多数)进程的信息。 例如,以下内容:
for proc in psutil.process_iter():
try:
print proc.pid, proc.username
except psutil.AccessDenied:
print "denied"
打印:
0 NT AUTHORITY\SYSTEM
4 NT AUTHORITY\SYSTEM
428 denied
444 denied
632 my_user
648 denied
676 my_user
704 denied
748 denied
772 denied
804 denied
824 denied
832 denied
880 my_user
920 denied
988 denied
1052 denied
...
对于这些相同的“拒绝”进程,get_cpu_times() 等方法可以正常工作。
UPD:抱歉,我用不同的属性和不同的打印运行了这个东西很多次,以至于我粘贴的输出来自不同的代码段(打印的用户名 ,而不是名称)。但是,我希望这一点仍然很清楚......
最佳答案
看来错误是在底层 C 代码中生成的。 我不知道为什么GetProcessImageFileName()优先于 QueryFullProcessImageName() (因为后者返回的路径与我们预期的一样,使用驱动器号/UNC 路径),但调用可能会因其中任何一个而失败。
你可能不得不用 the developers 来解决这个问题.
来自 _psutil_mswindows.c(第 502 行):
if (GetProcessImageFileName(hProcess, &exe, nSize) == 0) {
CloseHandle(hProcess);
if (GetLastError() == ERROR_INVALID_PARAMETER) {
// see https://code.google.com/p/psutil/issues/detail?id=414
AccessDenied();
}
else {
PyErr_SetFromWindowsErr(0);
}
return NULL;
}
编辑:
我试图对症状做更多的调查,并且我有更多的报告。在安装了相对较新的 Python 2 (2.7.6) 的或多或少完全修补的 Win7 SP1 x64 机器上,我无法访问 psutil.Process 类的这些成员:exe , get_ionice(), get_memory_maps(), get_nice(), get_cwd()/getcwd()、get_open_files()、name、nice 和 username。
Windows 机器的任何管理员用户当然都可以获得此信息,所以我不知道为什么 psutil 无法获取它,除非它以 The Wrong Way™(Microsoft 定义的永久移动目标)进行操作。
关于python - Psutil 在获取进程属性时为所有非用户拥有的进程引发 AccessDenied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21776302/
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge