Только некоторые команды оболочки Windows работают через ruby? - PullRequest
0 голосов
/ 12 апреля 2010

Я пытаюсь использовать сценарий для управления параметрами питания, поскольку XP не дает вам интуитивно понятного способа изменения параметров частоты процессора. Вот мой сценарий:

meh = `cmd.exe /C POWERCFG.EXE /QUERY Portable/Laptop`
puts ""
puts meh

    case input
        when 1 then system('cmd.exe /C POWERCFG.EXE /CHANGE Portable/Laptop /processor-throttle-ac NONE')
        when 2 then system('cmd.exe /C POWERCFG.EXE /CHANGE Portable/Laptop /processor-throttle-ac ADAPTIVE')
        when 3 then `cmd.exe /C POWERCFG.EXE /CHANGE Portable/Laptop /processor-throttle-ac CONSTANT`
    end

Проблема в том, что изменения просто не происходят. Если я запускаю те же команды непосредственно в командной строке cmd.exe, они работают. Это очень странно, но ничего не работает после начального запроса powercfg. Я чувствую, что упускаю что-то невероятно очевидное.

Как мне заставить скрипт работать правильно?

Обновление: C: \ shoe> ruby ​​freq.rb

Field Description          Value
-----------------          -----
Name                       Portable/Laptop
Numerical ID               1
Turn off monitor (AC)      After 15 mins
Turn off monitor (DC)      After 5 mins
Turn off hard disks (AC)   After 30 mins
Turn off hard disks (DC)   After 5 mins
System standby (AC)        After 20 mins
System standby (DC)        After 5 mins
System hibernates (AC)     Not Supported
System hibernates (DC)     Not Supported
Processor Throttle (AC)    ADAPTIVE
Processor Throttle (DC)    ADAPTIVE
Enter a number to switch portable/laptop profile to that mode.
1 - None (HIGHEST FREQUENCY MODE)
2 - Adaptive (SPEEDSTEP)
3 - Constant (LOWEST FREQUENCY MODE)
#SCRIPT IS CANCELED HERE. I've already tested the methods to change powercfg options, and they work, but they only apply to Ruby's instance of powercfg.

C:\shoe>powercfg /QUERY 1 /NUMERICAL


Field Description          Value
-----------------          -----
Name                       Portable/Laptop
Numerical ID               1
Turn off monitor (AC)      After 15 mins
Turn off monitor (DC)      After 5 mins
Turn off hard disks (AC)   After 30 mins
Turn off hard disks (DC)   After 5 mins
System standby (AC)        After 20 mins
System standby (DC)        After 5 mins
System hibernates (AC)     Not Supported
System hibernates (DC)     Not Supported
Processor Throttle (AC)    CONSTANT
Processor Throttle (DC)    ADAPTIVE

Ответы [ 3 ]

1 голос
/ 12 апреля 2010

Скрипт работает нормально (действительно, вам не нужен бит cmd.exe / C); то есть он работает нормально, если «input» является целым числом, а не строкой типа «1».

Может ли это быть невероятной очевидной вещью, которую вы упустили из виду? Это работает для меня (моя система не поддерживает processor_throttle, поэтому я проверил что-то еще).

def status
  `POWERCFG.EXE /QUERY #{@scheme_name} `
end

@scheme_name = "Portable/Laptop"
puts 'Before:'
puts status
 `POWERCFG.EXE /CHANGE #{@scheme_name}  /disk-timeout-ac 15`
puts '_'*50
puts 'After: '
puts status 

Однако этот код изменяет схему (вид профиля), а не обязательно активную схему.

0 голосов
/ 13 апреля 2010

Вместо того, чтобы запускать эти команды непосредственно из вызова system, попробуйте записать вызов POWERCFG в файл .bat и запустить этот файл через system. Раньше мне приходилось делать это для того, чтобы некоторые приложения DOS работали так же, как если бы они выполнялись вручную в окне cmd.exe.

Редактировать: Исходя из примера здесь , я бы порекомендовал запустить POWERCFG /SETACTIVE Portable/Laptop после внесения изменений (чтобы изменения вступили в силу).

0 голосов
/ 12 апреля 2010

попробуй

%x[cmd.exe /C ....]

Да без тегов ''. Это работает для меня, когда я должен сделать что-то в ruby ​​в оболочке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...