LinuxForum.Fans
Тема

PYTHON-скрипт: как остаться в интерактивном режиме?

Автор: michat 11 сообщений 2345 просмотров
#193671

Привет!
1) Как остаться в интерактивном режиме после завершения выполнения скрипта?
---------------------------------
$ python hz.py k0040.hz
['hz.py', 'k0040.hz']
Program file name: hz.py
Arguments: ['k0040.hz']
$
-------------------------------

2) Почему происходит ошибка?
-------------------------------------------
$python
>>> import hz.py k0040.hz
File "<stdin>", line 1
import hz.py k0040.hz
^
SyntaxError: invalid syntax
>>>
--------------------------------------
k0040.hz - является аргументом данного скрипта. Но интерпретатор этого не понимает. Почему?

#193673

При импорте расширение не указывается.
Да и аргумент не у места, наверное.

#193675

не указывая расширение при импорте ситуация не меняется.
---------------------------------
>>> import hz k0040.hz
File "<stdin>", line 1
import hz k0040.hz
^
SyntaxError: invalid syntax
>>>
------------------------------

#193679

Вопрос, зачем в строке с импортом аргумент?
Может всё таки

from hz import k0040
#193680

Дело в том, что hz.py - это питоновский скрипт. Данный скрипт предназначен для чтения и обработки информации из файлов с расширением .hz .Файлы могут быть разные и их много, поэтому их вход в скрипт оформлен как аргумент. Скрипт работает хорошо, если я его запускаю в виде
-------------------------------
$python hz.py k0040.hz
-------------------------------

Однако, корректно запустить его из интерактивного режима не могу (не знаю как), т.к. наверняка требуется указать какие-то дополнительные опции или следовать определённому синтаксису, а я в питоне новичок.

#193686

Вам, видимо, стоит отредактировать сам скрипт.
Предположу, что в скрипте имеется нечто такое

import sys
.....
.....
sys.argv[1]

Так и получается Ваш аргумент, который Вы вводите.
Эту конструкцию надо заменить на запрос введения строки

raw_input() # если python 2.x
input() # если python 3.x

но не видя скрипта, посоветовать что то сложно.

#193688

Спасибо за ссылку! Вычитал мой ответ на первый вопрос:
-------------------
$ python -i hz.py k0040.hz
['hz.py', 'k0040.hz']
Program file name: hz.py
Arguments: ['k0040.hz']
Shape of maindata massive: (24948, 35)
>>>
-----------------------
т.е. добавление опции -i перед названием скрипта позволяет остаться в интерпретаторе после завершения выполнения скрипта.

Однако, на данный момент остаётся неясен ответ на второй вопрос.

#193689

Да, действительно похожая конструкция действительно присутствует в моём скрипте.
-------------------------
#> read input file and arguments
args=sys.argv
print args
print 'Program file name: %s' % args[0] # Program file name
pgm=args[0]
print 'Arguments: %s' % args[1:] # Arguments
#<

#> check if a file-data argument is present
if len(args[1:])==0:
print "Pgm %s : one file name needed as argument. We stop." % pgm
sys.exit()
#<
-----------------------

#193693

Имя файла можно вводить по запросу, примерно так

filename = raw_input('Введите имя файла или нажмите "Enter" для завершения')

и потом уже обращаться к переменной filename.
А всё что касается sys.argv[1] убрать из скрипта.
Таким образом не выходя из скрипта Вы можете обработать несколько файлов.

#193697

Спасибо за помощь! Реализую.

Войдите или зарегистрируйтесь, чтобы ответить.