2014-11-23 5 views
0

Я пытаюсь выполнить скрипт python, где я ввожу аргумент в командную строку. Программа temperature.py так, если я ввести:if then statement with sys.argv in python

./temperature.py 56

sys.argv [1] = 56

Теперь программа как таковая:

import sys 

temp=sys.argv[1] 
print temp 

if temp < 65: 
    print "Temperature is Cold" 
else: 
    print "Temperature is warm" 

на основе выше логики, я бы ожидать, что если бы я вошел в оперативное

./temperature.py 56

температура будет 56, который меньше, чем 65, так что я мог бы ответ:

"Температура холодна"

но Я получаю ответ:

«Температура тепла»

независимо от того, какую температуру я ставлю в аргументе. Я до сих пор получаю правильное значение темпа, равное правилу первого аргумента (56), поэтому я не понимаю, почему логика не работает в инструкции if then. Как заставить логику работать так, что когда я вхожу в температуру менее 65 (т.е. ./temperature.py 56), я получаю ответ «Температура холодная», и если я вхожу в температуру более 65 (то есть ./temperature .py 75), я бы получил температуру реакции теплым? Есть идеи?

+0

вам нужно преобразовать аргумент '' int', темп = INT (sys.argv [1]) ' – Kasramvd

+0

Вам необходимо преобразовать в целое число. 'temp = int (sys.argv [1])' – RedX

+0

@ То, что вы видите весь его код - он использует 'sys.argv' для захвата аргументов и не анализирует их :) –

ответ

2

Аргументы - это строки, а не целые числа. Вы сравниваете "56" < 65 который False. Вместо этого попробуйте:

# temperature.py 
import sys 

try: 
    temperature = float(sys.argv[1]) 
except ValueError: 
    print("Argument must be a number") 
    sys.exit(1) 
    # kick out with an error code 

if temp < 65: 
    # etc as you have it 
+1

Вы имеете в виду' sys.exit (1) '. 'return' не может быть вне функции. – iCodez

+0

@iCodez кричит, что вы правы. Проводил слишком много времени в приложениях с графическим интерфейсом и не уделял особого внимания CLI –