Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Центр помощи
  • » возникает ошибка при написании примера из книги, помогите, пожалуйста, ее найти [RSS Feed]

#1 Ноя. 7, 2020 17:33:45

kancler
Зарегистрирован: 2020-11-07
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

возникает ошибка при написании примера из книги, помогите, пожалуйста, ее найти

Имеется программа, которая порождает дочерний процесс ветвлением (использую Cygwin) и общается с ним при помощи двух каналов. Сама программа по сути только передает туда-сюда сообщения, но у меня, почему-то возникает ошибка. Весь день пролазил, но так и не понял почему. Мб знает кто, в чем проблема? Заранее благодарю! p.s. Пример из книги: М. Лутц “Программирование на Python, т.1”
Вывод:

Kancler@Kanc1er-pc ~
$ python myprogs/pipes.py
Child 1849 of 1848 got arg: "spam"
Traceback (most recent call last):
File "myprogs/pipes.py", line 31, in <module>
reply = input()
File "<string>", line 1
Child 1849 got: ('Hello 1 from parent ', 1848)
^
SyntaxError: invalid syntax

Kancler@Kanc1er-pc ~
$ Traceback (most recent call last):
File "myprogs/pipe-testchild.py", line 10, in <module>
recv = input()
EOFError: EOF when reading a line

Родительская программа (pipe.py):
 import os, sys
def spawn(prog, *args):                  # имя программы, аргументы командной строки
    stdinFd = sys.stdin.fileno()          # получить дескрипторы потоков
    stdoutFd = sys.stdout.fileno()
    
    parentIn, childOut = os.pipe()      # создать два канала IPC
    childIn, parentOut = os.pipe()      # pipe возвращает (inputfd, outoutfd)
    
    pid = os.fork()                            # создать копию процесса
    if pid:
        os.close(childOut)                    # в родительском после ветвления:
        os.close(childIn)                      # закрыть дочерние концы в родителе
        os.dup2(parentIn, stdinFd)       # копия sys.stdin = pipe1[0]
        os.dup2(parentOut, stdoutFd)   # копия sys.stdout = pipe2[1]
    else:
        os.close(parentIn)                   # в дочернем после ветвления:
        os.close(parentOut)                 # закрыть родительские концы
        os.dup2(childIn, stdinFd)          # копия sys.stdin = pipe2[0]
        os.dup2(childOut, stdoutFd)      # копия sys.stdout = pipe1[1]
        args = (prog,) + args
        os.execvp(prog, args)               # запустить новую программу
        assert False, 'execvp failed!'
if __name__ == '__main__':
    mypid = os.getpid()
    spawn('python', 'myprogs/pipe-testchild.py', 'spam')            # породить дочернюю прогр.
    print('Hello 1 from parent ', mypid)                                     # в stdin дочерней прогр.
    sys.stdout.flush()                                                              # вытолкнуть буфер stdio
    reply = input()                                                                  # из потока вывода потомка
    sys.stderr.write('Parent got: "%s"\n' % reply)                       # stderr не связан с каналом
    print('Hello 2 from parent ', mypid)
    sys.stdout.flush()
    reply = input()
    sys.stderr.write('Parent got: "%s"\n' % reply[-1]) 

Дочерняя программа(pipe-testchild.py):
 import os, sys, time
mypid = os.getpid()
parentpid = os.getppid()
sys.stderr.write('Child %d of %d got arg: "%s"\n' % (mypid, parentpid, sys.argv[1]))
for i in range(2):
    time.sleep(2)                                                # приостановить родительский процесс
    recv = input()                                               # stdin связан с каналом: данные будут поступать из
    time.sleep(2)                                                # родительского потока вывода stdout
    send = 'Child %d got: %s' % (mypid, recv)
    print(send)                                                  # stdout связан с каналом: данные будут поступать в
                                                                         # родительский поток ввода stdin
 sys.stdout.flush()                                        # гарантировать отправку, иначе процесс заблокируется

Отредактировано kancler (Ноя. 8, 2020 11:01:03)

Офлайн

#2 Ноя. 7, 2020 22:57:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9897
Репутация: +  855  -
Профиль   Отправить e-mail  

возникает ошибка при написании примера из книги, помогите, пожалуйста, ее найти

kancler
  
sys.stderr.write('Parent got: "$s"\n' % reply)
А что такое $s?



Офлайн

#3 Ноя. 8, 2020 11:00:00

kancler
Зарегистрирован: 2020-11-07
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

возникает ошибка при написании примера из книги, помогите, пожалуйста, ее найти

py.user.next
Мой косяк, извиняюсь, но ошибка все та же. Полностью скопировав пример из книги терминал выдает все то же сообщение об ошибке ;(
Могут ли проблемы быть в cygwin?

Отредактировано kancler (Ноя. 8, 2020 11:03:16)

Офлайн

#4 Ноя. 16, 2020 18:25:58

simonovaleksandr
Зарегистрирован: 2020-08-17
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

возникает ошибка при написании примера из книги, помогите, пожалуйста, ее найти

import numpy as np
a=np.arange(12)
print(a)

Вот такой код я набрал в пайчарм ,заранее установил numpy и выходит ошибка:

Traceback (most recent call last):
File “CUsers/Lenovo/PycharmProjects/pythonProject1/numpy.py”, line 1, in <module>
import numpy
File “C:\Users\Lenovo\PycharmProjects\pythonProject1\numpy.py”, line 2, in <module>
a=numpy.arange(12)
AttributeError: partially initialized module ‘numpy’ has no attribute ‘arange’ (most likely due to a circular import)

Process finished with exit code 1

все делал как по книге
Помогите пожалуйста разобраться

Офлайн

#5 Ноя. 16, 2020 22:50:08

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9897
Репутация: +  855  -
Профиль   Отправить e-mail  

возникает ошибка при написании примера из книги, помогите, пожалуйста, ее найти

simonovaleksandr
File "C:\Users\Lenovo\PycharmProjects\pythonProject1\numpy.py"
Есть модуль numpy и есть твой модуль numpy. Когда ты делаешь import, поиск идёт сначала в текущей директории, а уже потом в директориях интерпретатора Python. Поэтому модуль импортирует сам себя из своей же директории. Переименуй свой модуль в текущей директории, назови файл хотя бы как mynumpy.py .


tags: import



Отредактировано py.user.next (Ноя. 16, 2020 22:50:42)

Офлайн

#6 Ноя. 17, 2020 19:18:58

simonovaleksandr
Зарегистрирован: 2020-08-17
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

возникает ошибка при написании примера из книги, помогите, пожалуйста, ее найти

Спасибо большое

Офлайн

#7 Ноя. 17, 2020 19:19:53

simonovaleksandr
Зарегистрирован: 2020-08-17
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

возникает ошибка при написании примера из книги, помогите, пожалуйста, ее найти

Значит вот так по модулями, библиотекам не надо файлы называть?

Офлайн

#8 Ноя. 17, 2020 19:19:56

simonovaleksandr
Зарегистрирован: 2020-08-17
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

возникает ошибка при написании примера из книги, помогите, пожалуйста, ее найти

Значит вот так по модулями, библиотекам не надо файлы называть?

Офлайн

#9 Ноя. 17, 2020 21:23:57

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

возникает ошибка при написании примера из книги, помогите, пожалуйста, ее найти

simonovaleksandr
Значит вот так по модулями, библиотекам не надо файлы называть?
Почему? Если это именно то чего вы хотите то надо. Например может вы хотите подменить стандартный модуль на свой. Механизмы импорта работают по четко определенным правилам, вы получаете именно то что запросили.



Офлайн

  • Начало
  • » Центр помощи
  • » возникает ошибка при написании примера из книги, помогите, пожалуйста, ее найти[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version