我有一个 Python 脚本EulerianCycle.py
和一个输入文件,欧拉循环.txt。
py EulerianCycle euleriancycle.txt > cat euleriancycleout.txt
通过进入当前文件夹(py
是的别名) ,我可以得到正确的结果python3
。
但是,我当前文件夹中还有另一个文件夹,名为输出,我希望所有输出文件都指向该目录。
我试过了py EulerianCycle.py euleriancycle.txt | cd outputs/ | cat > euleriancycleout.txt
和 py EulerianCycle.py euleriancycle.txt | cat >cd outputs/euleriancycleout.txt
这让我管道破裂错误。
答案1
如果py EulerianCycle.py euleriancycle.txt
写入标准输出流(我假设它会,否则你将无法将其通过管道传输到cat
),那么cat
在这里完全是多余的 - 你可以直接重定向标准输出,指定输出文件的绝对或相对路径:
py EulerianCycle.py euleriancycle.txt > outputs/euleriancycleout.txt
(注意:该目录outputs/
必须已经存在)。
您的其他命令均无法按照您想象的方式运行。
在 中
py EulerianCycle euleriancycle.txt > cat euleriancycleout.txt
,shellcat
在当前目录中创建一个名为的文件,并将 的输出重定向py EulerianCycle
到该文件,传递两个都euleriancycle.txt
并将euleriancycleout.txt
其作为输入参数。在 中
py EulerianCycle.py euleriancycle.txt | cat >cd outputs/euleriancycleout.txt
,shellcd
在当前目录中创建一个名为的文件,cat
读outputs/euleriancycleout.txt
并将其写入文件cd
,忽略来自管道的标准输入(cat
仅在没有输入文件或显式输入时读取标准输入-
)。
也许你在这里的目的是将输出传输到子壳喜欢:
py EulerianCycle.py euleriancycle.txt | (cd outputs; cat > euleriancycleout.txt)
或者
py EulerianCycle.py euleriancycle.txt | (cd outputs && cat > euleriancycleout.txt)
这里,cat
在切换到目标目录后,读取子 shell 的标准输入(由管道提供)。第二个版本仅euleriancycleout.txt
在cd
命令成功时创建;第一个版本在命令失败时在当前目录中创建cd
。
答案2
此外,您还可以使用:
EulerianCycle.py | tee euleriancycleout.txt
将内容同时通过 2 个单独的流发送到文本文件和标准输出。换句话说,内容最终将同时出现在文本文件中并打印在终端中。
我总是这样做,因为它可以向我显示所写的内容,并且省去了我打开 vim 来检查我的工作。
答案3
我发现我可以使用py EulerianCycle.py euleriancycle.txt | cat > euleriancycleout.txt | mv -t outputs/ euleriancycleout.txt
或者
py EulerianCycle.py euleriancycle.txt | cat > euleriancycleout.txt & mv -t outputs/ euleriancycleout.txt
仍然对可以更简洁地执行此操作的可能的命令持开放态度。:)
编辑:所呈现的代码效率不高,请参见绿色复选标记的答案