Используя #! комментарий в рубиновом выполнении в Ubuntu

В коде есть два цикла «выполнения», поэтому он никогда не попадает во второй цикл.

Отступы в коде перепутаны - может быть, из-за вставки в SO? Подавляющее большинство программистов используют 4 пробела для отступа. Это, вероятно, хороший обычай для подражания.

Код также загружал «стартовое» изображение при каждой итерации цикла, в этом нет необходимости (если только он не изменяется на диске, в этом случае используйте os.stat() для проверки изменений перед его повторной загрузкой).

Переработанный основной цикл:

folder = os.path.dirname(os.path.realpath(__file__))
start  = pygame.image.load(os.path.join(folder, "wecvguh.png"))

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        if event.type == pygame.KEYDOWN:
            command = "python AhjaiyCPT.py"
            subprocess.call(command)

    gameDisplay.fill(white)
    gameDisplay.blit(start, (x,y))
    pygame.display.update()

pygame.quit()
5
задан 8 January 2009 в 08:42
поделиться

7 ответов

Если Вы находитесь в том же каталоге как matz.rb файл, несомненно, выполнят его как

$ ./matz.rb

и не просто

$ matz.rb

Вот сессия оболочки, демонстрирующая эту работу:

$ ls -la m*
-rwxr-xr-x  1 gareth  gareth  32  8 Jan 08:46 matz.rb
$ cat matz.rb
#!/usr/bin/env ruby
puts "Matz"
$ matz.rb
-bash: matz.rb: command not found
$ ./matz.rb
Matz
9
ответ дан 18 December 2019 в 06:13
поделиться

Ваш файл не был создан в Windows, было это? Если это имеет \r\n окончания строки, которые нарушат удар. Можно открыть его с Vim и проверкой:

vi matz.rb
:set ff=unix
:wq

Если, когда Вы полный вкладкой "и следующие =" часть это говорит, что DOS, то это имеет неправильный формат файла. С другой стороны, выполненный dos2unix и попытка петлять снова:

apt-get install sysutils
dos2unix matz.rb
3
ответ дан 18 December 2019 в 06:13
поделиться

/usr/bin/env часть прекрасна. Необходимо дать удару путь к matz.rb при выполнении его. Если Вы находитесь в каталоге с matz.rb, введите "./matz.rb". Каталог "." означает текущий каталог - удар не смотрит там по умолчанию при запущении программ (как Windows, делает).

Огибающая программа (/usr/bin/env) ищет исполняемый путь поиска - переменную окружения PATH - для ruby программа, как будто Вы ввели его в командной строке и запускаете ту программу. Комментарий хижины не делает этого. Если Вы хотите дать свой сценарий другим людям, которым нельзя было бы установить рубин в том же месте как Вы, то необходимо использовать"#!/usr/bin/env ruby"прокомментируйте так, чтобы это работало, пока они могут выполнить рубин путем ввода "рубина".

10
ответ дан 18 December 2019 в 06:13
поделиться

Мне не удалось видеть, что любой ответ указывает на Вас для изменения исполняемого режима файла, таким образом, Вы могли бы хотеть попытаться сделать

chmod +x matz.rb

прежде чем Вы пойдете и попытаетесь делать

./matz.rb

Также могло бы быть лучше не присоединить .rb расширение файла, такой имеет место для нормального рубина / сценарии направляющих, например, пишите сценарий/генерируйте, сценарий/консоль и т.д.

1
ответ дан 18 December 2019 в 06:13
поделиться

Это кажется, что Вы находитесь в системе Unix/Linux и просто вводе matz.rb на командной строке. При попытке выполнить команду в текущем каталоге, необходимо назвать его как./matz.rb. ". /" говорит этому смотреть в текущем каталоге, а не просто/usr/bin и друзья.

2
ответ дан 18 December 2019 в 06:13
поделиться

Вы попробовали ShaBang как после непосредственно указать на рубин?

#! /usr/bin/ruby

Затем Вы называете сценарий от командной строки как

./matz.rb

Под системами Unix/Linux точка перед командой для поиска команды в текущем каталоге. При предоставлении пути как/usr/bin/ruby он будет искать в текущем каталоге каталог, названный usr...

Команда без точки / впереди ищется в местоположениях, указанных переменной пути среды.

Команда с / в начале ищется точно от корня после указанного пути.

В Вашем ShaBang Вы хотите указать точный тракт к интерпретатору, таким образом, "/usr/bin/ruby" является корректным. На командной строке, где Вы хотите, чтобы Ваш сценарий был выполнен, необходимо назвать сценарий с "./matz.rb" иначе, удар будет искать команду как/usr/bin/matz.rb, что приводит к errormessage.

0
ответ дан 18 December 2019 в 06:13
поделиться

Можно использовать строку 'хижины' с также:

#!/usr/bin/ruby
#!/usr/bin/env ruby

Но сценарий должен быть исполняемым файлом (Вы указали, что это), и в Вашем $PATH оболочки.

echo $PATH

Поместите сценарий в один из тех каталогов, или измените Ваш путь, иначе укажите полный путь к нему, например:

export PATH=$PATH:/home/user/bin

или один из них:

./matz.rb
/home/user/bin/matz.rb

Можно также выполнить интерпретатор Ruby, передающий имя файла сценария как аргумент, и это будет выполняться. Это особенно полезно, если у Вас есть другая версия Ruby, установленного в Вашей системе (скажите, для тестирования, как Ruby Enterprise Edition, REE):

/usr/bin/ruby matz.rb
/opt/ree/bin/ruby matz.rb
1
ответ дан 18 December 2019 в 06:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: