Чтение из /dev/pts/5 и вывод в /dev/pts/6

Нужно запустить скрипт Python, чтобы сделать следующее, что я делаю вручную прямо сейчас для тестирования.

cat /dev/pts/5

И затем мне нужно повторить это обратно в /dev/pts/6

echo <DATA_RECEIVED_FROM_5> > /dev/pts/6

Кажется, я не могу заставить python на самом деле читать то, что приходит из /dev/pts/5, и сохранять его в список, а затем выводить один за другим в /dev/pts/6, используя эхо

#!/bin/python

import sys
import subprocess

seq = []
count = 1

while True:
    term = subprocess.call(['cat','/dev/pts/5'])

    seq.append(term)
    if len(seq) == count:
        for i in seq:
            subprocess.call(['echo',i,'/dev/pts/6'])
            seq = []
            count = count + 1

Итак, какова цель вашей программы? Чтобы создать список файлов в /dev/pts/5 и распечатать этот список файлов в /dev/pts/6?

Reedinationer 05.04.2019 21:33

Ну, конечной целью является другая программа, которая печатает что-то каждые несколько секунд в /dev/pts/5, и мне нужно следить за тем, чтобы иметь возможность печатать то же самое, что и в /dev/pts/5. /dev/pts/6, это для проверки концепции, но нам нужно посмотреть, как это будет работать.

Mr39 05.04.2019 21:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
1 167
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не уверен, что понимаю вашу проблему и желаемый результат, но чтобы создать список имен файлов в /dev/pts/5 и просто сохранить его как файл .txt в /dev/pts/6, вы должны использовать модуль os, который входит в стандартную комплектацию Python. Вы можете выполнить эту задачу как таковую:

import os

list_of_files = []
for dirpath, dirnames, filenames in os.walk('/dev/pts/5'):
    list_of_files.append([dirpath, dirnames, filenames])
with open('/dev/pts/6/output.txt', 'w+') as file:
    for file_info in list_of_files:
        file.write("{} -> {} -> {}".format(file_info[0], file_info[1], file_info[2]))

Вывод из этого, вероятно, будет немного большим, но вы можете просто применить некоторую логику, чтобы отфильтровать то, что вы ищете.

os.walk() документация

Обновить

Считать данные из произвольного файла и записать их в произвольный файл (без расширений) (если я правильно понимаю) довольно легко сделать в python:

with open('/dev/pts/5', 'rb') as file: # use 'rb' to handle arbitrary data formats
    data = file.read()
with open(''/dev/pts/6', 'wb+') as file:
    # 'wb+' will handle arbitrary data and make file if it doesn't exist.
    # if it does exist it will be overwritten!! To append instead use 'ab+'
    file.write(data)

третий раз прелесть

Следуя примеру здесь, похоже, вам нужно запустить:

term = subprocess.run(['cat','/dev/pts/5'], capture_output=True)
print(term.stdout)

Где важный бит — capture_output=True, а затем вам нужно получить доступ к .stdout объекта CompletedProcess!

большое спасибо, но я думаю, что, возможно, запутался в том, что я пытаюсь сделать, мне нужно cat /dev/pts/5, это на самом деле файл, а не каталог, поэтому мне нужно cat то, что находится в /dev/ pts/5 и эхо или запись в /dev/pts/6, который является другим файлом

Mr39 05.04.2019 21:47

@ Mr39 Итак, у вас есть файл с именем 5 без расширения? И ваша цель — скопировать содержимое этого файла в файл с именем 6 без расширения?

Reedinationer 05.04.2019 21:50

правильно, /dev/pts/5 и 6 - это настоящие последовательные соединения, поэтому у них нет расширений, но нужно постоянно смотреть на файл и, когда что-то приходит к нему, мгновенно копировать его в /dev/pts/6

Mr39 05.04.2019 21:53

@Mr39, это больше того, что вы пытаетесь сделать?

Reedinationer 05.04.2019 21:59

еще раз спасибо за обновление, но здесь кроется проблема по какой-то причине, которую я не могу объяснить, почему, когда я пытаюсь открыть файл в python, он не работает, но если я запускаю системную команду, такую ​​​​как cat, в файл он отлично работает, поэтому я продолжал пытаться запустить внешнюю команду в python и сохранить вывод в переменную, но не смог успешно

Mr39 05.04.2019 22:03

Еще раз спасибо, проблема только в том, что Capture_output доступен только для Python 3.7, я использую 3.5.

Mr39 05.04.2019 23:01

@Mr39 По моей ссылке New in version 3.5. Не вижу проблемы?

Reedinationer 06.04.2019 01:51

Другие вопросы по теме