“不能将\”0.0“变成型号。”数字-1700从“0.0”到数字

时间:2013-07-29 06:45:38

标签: macos applescript

为什么我不断收到错误“无法将\”0.0 \“转换为类型编号。”数字-1700从“0.0”到数字?如果我将删除为数字,则显示对话框始终显示。

tell application "System Events"
    repeat
        set PID to unix id of process "JPEGmini"
        set getCpuPercent to "ps aux | grep " & PID & " | grep -v grep | awk '{print $3}'"
        set cpuPercent to (do shell script getCpuPercent) as number

        if (cpuPercent) < 5 then

            display dialog cpuPercent

        end if
    end repeat
end tell

3 个答案:

答案 0 :(得分:1)

我用Safari进程尝试了你的脚本,但也得到了错误。似乎从&#34; do shell脚本&#34;返回了多个结果。 line ...所以它无法将结果变成数字。

我将代码更改为此代码并且有效...

tell application "System Events"
    repeat
        set PID to unix id of process "Safari"
        set getCpuPercentCmd to "ps aux | grep " & PID & " | grep -v grep | awk '{print $3}'"
        set getCpuPercent to paragraphs of (do shell script getCpuPercentCmd)
        set cpuPercent to (item -1 of getCpuPercent) as number

        if cpuPercent < 5 then
            display dialog cpuPercent as text
        end if
    end repeat
end tell

答案 1 :(得分:1)

我只运行了grep命令,发现在我的机器上webkit正在运行一个与Safari PID绑定的WebProcess。您可以在第二行末尾看到-servicenamecom.apple.WebKit.WebProcess-4881-0x1076eb0c0。因此,grep实际上找到了两个结果并返回"0.0\r0.0",它不能成为一个数字。

$user        4881  13.3  1.2  3812416 104840   ??  R     4:27PM   0:09.57 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_1692061
$user        4885   0.1  0.7  3778328  56108   ??  S     4:27PM   0:00.79 /System/Library/StagedFrameworks/Safari/WebKit2.framework/WebProcess.app/Contents/MacOS/WebProcess /System/Library/StagedFrameworks/Safari/WebKit2.framework/WebKit2 -type webprocess -servicename com.apple.WebKit.WebProcess-4881-0x1076eb0c0 -localization en_US -client-identifier com.apple.Safari -ui-process-name Safari
$user        5250   0.0  0.0  2432768    520   ??  R     4:29PM   0:00.00 grep 4881
$user        5248   0.0  0.0  2433432    824   ??  S     4:29PM   0:00.00 sh -c ps aux | grep 4881

答案 2 :(得分:1)

这里的问题是你的ps命令返回了太多信息。为了说明我的意思,在我写作时,我的Google Chrome进程的pid为916.使用问题中的方法,我可以ps aux | grep 916查看此过程。但这还不够 - grep将匹配ps输出中字符串“916”的任何实例,因此如果恰好有一个pid为1916或9160的进程,那么这也将匹配。另外ps aux列出了许多其他统计数据,其中许多也可能包含字符串“916”。事实上,如果我运行ps aux | grep -c 916,目前有58行匹配!

所以我们需要做的就是告诉ps我们只对特定的pid感兴趣:

$ ps -o%cpu -p 916 | grep '[[:digit:]]'
  0.5
$ 

这将仅列出具有给定$ PID的进程的cpu%。需要管道到grep '[[:digit:]]'才能返回数字百分比,并从ps输出中删除“CPU”列标题。

将其包装到原始脚本中,您将拥有:

tell application "System Events"
    repeat
        set PID to unix id of process "JPEGmini"
        set getCpuPercent to "ps -o%cpu -p " & PID & " | grep '[[:digit:]]'"
        set cpuPercent to (do shell script getCpuPercent) as number

        if (cpuPercent) < 5 then

            display dialog cpuPercent

        end if
    end repeat
end tell

我没有安装JPEGmini,但对于我在OSX 10.8.5 powerbook上尝试的所有其他进程,这对我来说很好。