Рейтинг:2

Как перенаправить вывод «кошки» в другую папку?

флаг us

У меня есть скрипт Python, EulerianCycle.py, и входной файл, euleriancycle.txt.

Я могу получить правильные результаты, выполнив py EulerianCycle euleriancycle.txt > cat euleriancycleout.txt в текущую папку (пи это псевдоним для питон3).

Однако у меня есть еще одна папка в этой текущей под названием выходы, на который я хочу направить все мои выходные файлы.

я пытался py EulerianCycle.py euleriancycle.txt | компакт-диск выходы/ | кошка > euleriancycleout.txt

И py EulerianCycle.py euleriancycle.txt | кошка > cd outputs/euleriancycleout.txt

что дает мне Сломанная труба ошибка.

Рейтинг:7
флаг hr

Если py EulerianCycle.py euleriancycle.txt записывает в стандартный поток вывода (что, как я предполагаю, и делает, поскольку в противном случае вы не смогли бы передать его в кот) тогда кот здесь совершенно излишен - вы можете напрямую перенаправить стандартный вывод, указав абсолютный или относительный путь к вашему выходному файлу:

py EulerianCycle.py euleriancycle.txt > выходы/euleriancycleout.txt

(примечание: каталог выходы/ должен уже существовать).


Ни одна из других ваших команд не работает так, как вы можете себе представить.

  • в py EulerianCycle euleriancycle.txt > cat euleriancycleout.txt, оболочка создает файл с именем кот в текущем каталоге и перенаправляет вывод ру ЭйлерианЦикл к нему, проходя обе euleriancycle.txt и euleriancycleout.txt к нему в качестве входных аргументов.

  • в py EulerianCycle.py euleriancycle.txt | кошка > cd outputs/euleriancycleout.txt, оболочка создает файл с именем CD в текущем каталоге, кот читает выходы/euleriancycleout.txt и записывает в файл CD, игнорируя стандартный ввод из канала (кот читает стандартный ввод только тогда, когда ему не заданы входные файлы или явный -).

Возможно, то, к чему вы стремились, заключалось в том, чтобы передать вывод в подоболочка нравиться:

py EulerianCycle.py euleriancycle.txt | (выход cd; cat > euleriancycleout.txt)

или же

py EulerianCycle.py euleriancycle.txt | (cd outputs && cat > euleriancycleout.txt)

Здесь, кот читает стандартный ввод подоболочки, который предоставляется каналом, после перехода в целевой каталог. Вторая версия создает только euleriancycleout.txt если CD команда выполнена успешно; первый создает его в текущем каталоге, если CD терпит неудачу.

mook765 avatar
флаг cn
Было бы здорово, если бы вы добавили что-нибудь об ошибке первоначальной сломанной трубы, которая, я думаю, возникает из-за встроенной оболочки `cd`, которая не принимает стандартный ввод.
trinity avatar
флаг us
хорошо, да, это имеет смысл. Ваш код работает по назначению. Я также видел случайный файл с именем «cd» в файле cwd. Спасибо за объяснение непреднамеренных действий команд, которые я пробовал. для @mook765 ошибка сломанной трубы выглядит следующим образом: py EulerianCycle.py euleriancycle.txt | кошка > cd outputs/euleriancycleout.txt Traceback (последний последний вызов): Файл "/home/user/.../EulerianCycle.py", строка 39, в print('->'.join(eulerian_cycle(graph))) BrokenPipeError: [Errno 32] Сломанная труба
флаг hr
@Rukhan, предположительно, это потому, что `cat` читает (вместо записи) предполагаемый выходной файл, поэтому на самом деле отмечается, что ваша программа python отправляет по каналу
trinity avatar
флаг us
@steeldriver Понятно! Не понимал, что cat используется для stdin явно, как cat EulerianCycle.py, где я пытался заставить его читать stdout и отправлять его по каналу
флаг hr
@Trinity `cat` сделает это - если вы либо не дадите ему входных файлов, либо дадите ему `-` в качестве псевдо входного файла. Но здесь это не нужно.
trinity avatar
флаг us
@steeldriver отметил с благодарностью, удачи!
Рейтинг:1
флаг it

Дополнительно вы можете использовать:

ЭйлерианЦикл.py | тройник euleriancycleout.txt

для отправки содержимого в текстовый файл и на стандартный вывод одновременно в 2 отдельных потоках. Другими словами, содержимое окажется как в текстовом файле, так и напечатано в терминале.

Я всегда делаю это так, так как это показывает мне, что написано, и избавляет меня от необходимости открывать vim, чтобы проверить свою работу.

Nate T avatar
флаг it
Примечание. Это предназначено только для предоставления дополнительного контекста в поддержку ответа выше.
trinity avatar
флаг us
Спасибо за информацию, действительно полезная!
Рейтинг:-1
флаг us

Выяснилось, что я могу использовать py EulerianCycle.py euleriancycle.txt | кошка > euleriancycleout.txt | mv -t выводит/ euleriancycleout.txt

ИЛИ ЖЕ

py EulerianCycle.py euleriancycle.txt | cat > euleriancycleout.txt и mv -t outputs/ euleriancycleout.txt

Все еще открыта для возможной команды, которая сделает это более лаконично. :)

изменить: представленный код неэффективен, см. ответ, отмеченный зеленой галочкой

Ответить или комментировать

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