2016-12-09 2 views
-1

Итак, у меня есть скрипт python, работающий на сервере Linux. Код:Сценарий, запущенный на Linux, дает NameError

#!/bin/python 

databaseRun = input("Do you want to run all databases: ") 

if databaseRun == "yes": 
    print("yes") 
else: 
    print("no") 

Это возвращается и ошибка:

Traceback (most recent call last): 
File "./db_upg.py", line 3, in <module> databaseRun = input("Do you want to run all databases: ") 
File "string", line 1, in <module> NameError: name 'yes' is not defined 

Теперь, если я печатаю этот код в PyCharm он работает без проблем. Что мне не хватает? В основном вы будете ставить да или нет будет только ответы

ответ

0

Независимо от питона версии вы работаете, это работает для обоих:

#!/bin/python 
import sys 

if sys.version_info[0] == 3: 
    inp = input 
else: 
    inp = raw_input 

databaseRun = inp("Do you want to run all databases: ") 

if databaseRun == "yes": 
    print("yes") 
elif databaseRun == "no": 
    print("no") 
else: 
    print("invalid input") 
+0

Морис, это то, что я извиняюсь. – Micheal

+0

Да. Я. Как я уже сказал, это прекрасно работает в PyCharm. Теперь, когда ввод отображается, если я набираю 1 или любое другое целое число работает нормально. – Micheal

+0

отредактировал для py 2/3 –

1

Вы, вероятно, работает это с Python 2 вместо Python 3. Попробуйте запустить его с python3 <scriptname> вместо python <scriptname>. И измените линию shebang от #!/bin/python до #!/usr/bin/python3 соответственно.

В Python 2, input() считывает ввод как код вместо строки. Таким образом, когда вы вводите yes, он читает его как переменную yes, которая не определена. Если вы хотите запустить это с помощью Python 2 вместо Python 3, как предлагает ваш тег, используйте raw_input() вместо input(). Python 2's raw_input() возвращает строку, похожую на Python 3's input().

+0

, когда я запускаю скрипт, это то, что я набираю: ./db_upgrade.py – Micheal

+0

@MIcheal В этом случае просто измените строку shebang на 'python3', как я и предложил. –

+0

Простите, я пропустил эту линию. Это теперь дает мне плохой интерпретатор ошибки: Нет такого файла или каталога – Micheal