странное поведение system () в Ruby - PullRequest
0 голосов
/ 03 сентября 2011

Я настроил shuffle_play.rb в Ruby by Example для работы в Windows, с mpg123 вместо ogg123.Критическая часть - это метод play_file, который я изначально написал так:

def play_file(file)
  system("mpg123 \"#{file}\"")
end

У меня есть mpg123 в той же директории, что и мой скрипт ... он не работает.Но это работает:

def play_file(file)
  system("mpg123.exe \"#{file}\"")
end

Я считаю, это потому, что у меня нет рабочего каталога в% PATH% (и действительно проблема исчезает, когда я его добавляю), но даже тогда я не знаю достаточноо Windows, чтобы знать разницу.Может ли кто-нибудь объяснить обоснование этого?

1 Ответ

3 голосов
/ 03 сентября 2011

Вероятно, в примерах предполагается, что вы используете * nix-вариант, такой как Linux или Mac. В этих операционных системах программа называется mpg123, потому что эти ОС не заботятся о расширениях, просто проверьте, что файл имеет исполняемый атрибут

На окнах вещи очень разные. Windows решает, является ли программа программой в зависимости от расширения (.exe, .com, .bat, .cmd и т. Д.). Таким образом, программа в Windows должна называться mpg123.exe. Если вы откроете командную строку в Windows, вы можете запустить программу без указания расширения, так как Windows автоматически пробует разные расширения. Такое поведение при попытке использовать разные расширения происходит ONLY в командной строке, а не при попытке вызвать программу из другой.

Существует переменная окружения PATHEXT, список, в которой окна порядка пробуют разные расширения. На моем компьютере этот список:

C:\Windows\System32>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.RB;.RBW

Надеюсь, это было ясно. И предложение, если вы хотите написать код на ruby, установить Linux или получить Mac.

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