2017-01-27 6 views
2

Я новичок в запуске сценариев python в терминале. Я запустил скрипт ./filename.py и удостоверился, что он является исполняемым с chmod + x filename. Я также поставил #!/Usr/bin/env python в верхней части моей программы. я не получаю никаких ошибок, но ни один из моих операторов печати не отображается в моем терминале. прилагается мой код. есть идеи?Операции с печатью не отображаются при запуске скрипта в терминале

#!/usr/bin/env python 

import ctypes 
import os 

def is_hidden(filepath): 
    name = os.path.basename(os.path.abspath(filepath)) 
    return ('.' + name) or (has_hidden_attribute(filepath)) 

def has_hidden_attribute(filepath): 
    try: 
     attrs = ctypes.windll.kernel32.GetFileAttributesW(unicode(filepath)) 
     assert attrs != -1 
     result = bool(attrs & 2) 
    except (AttributeError, AssertionError): 
     result = False 
    return result 

def main(): 
    print ('whatup') 
    print(is_hidden('~/.jupyter')) 
    print('hey') 

А затем из терминала

$ ./makepass_jup.py 
$ 
+1

Вы исходите из фона 'Java' или' C'? В Python нет ничего особенного в функции 'main'. Вы должны называть это. –

ответ

1

Этот сценарий просто определяет кучу функций. Для его выполнения необходимо позвонить main().

4

Вы не звоните в свою main функцию в любом месте. Добавьте это в конец файла:

if __name__ == '__main__': 
    main() 

if заявление здесь общая картина в Python. Он работает как защитник для предотвращения выполнения кода при импорте файла в виде модуля. Когда интерпретатор Python импортирует файл, он устанавливает переменную __name__. Если этот файл импортируется из другого модуля, то ему будет присвоено имя __name__. Но если файл был выполнен как основная программа, то переменная __name__ будет установлена ​​в __main__, поэтому код внутри этого оператора будет выполнен, только если файл выполняется как программа.

См. Принятый ответ на вопрос What does if __name__ == “__main__”: do? для получения дополнительной информации.

+0

Пожалуйста, объясните, что делает этот код/​​как он работает. Почему бы просто не добавить 'main()' call в конце? – martineau

+0

Это не так и почему, просто _what_ он делает. – martineau

+1

Python-интерпретатор выполняет весь код в файле. Итак, если вы когда-либо импортируете этот файл, код будет всегда выполняться, если вы не используете этот оператор if. Но если запустить его из командной строки, переменная '__name__', которая содержит имя модуля, будет« __main__ », и код будет выполнен. В основном идея состоит в том, чтобы предотвратить выполнение кода, который вы не хотите выполнять, если вы импортируете файл в качестве модуля. Пожалуйста, обратитесь к этому вопросу для получения дополнительной информации: http://stackoverflow.com/questions/419163/what-does-if-name-main-do –

4

В Python функция main() не является точкой входа, в отличие от других языков, таких как C или Java. Как указывали другие люди, ваш main() не называется нигде в вашем коде.

Вы можете просто назвать свою main() функции на верхнем уровне модуля следующим образом:

import ctypes 
import os 

(your functions) 

main() 

Однако, все на высшем уровне, будут оцениваться, когда либо вы запускаете это непосредственно с python команды или импортом этот модуль откуда-то еще. Предположим, что имя файла вашего скрипта callee.py и вы пишете другой скрипт caller.py следующим образом:

import callee 

Тогда все заявления на высшем уровне callee.py будет оцениваться, в том числе main(). Если это не ваше намерение, вы можете проверить, был ли ваш скрипт вызван непосредственно из командной строки, проверив значение переменной __name__.

if __name__ == '__main__': 
    main() 

Если ваш сценарий непосредственно вызывается из командной строки, значение __name__ будет __main__. В противном случае это будет имя модуля. В этом случае callee.

 Смежные вопросы

  • Нет связанных вопросов^_^