Python 命令行管道四个命令

Python 命令行管道四个命令,python,command-line,Python,Command Line,我正在编写两个python脚本,这两个脚本与本学科教授给出的另外两个程序一起使用 程序按以下顺序工作: fonte -> newCodificador -> canal -> newDescodificador 名为fonte和canal的程序是由教授制作的,其他的是我的 问题是在终端中运行程序,程序的输出通过管道传递到最后一个。在将程序的输出newcodecador传递到canal之前,我需要读取输出的长度,然后作为程序的参数传递 它必须是这样的: ./fonte 1000

我正在编写两个python脚本,这两个脚本与本学科教授给出的另外两个程序一起使用

程序按以下顺序工作:

fonte -> newCodificador -> canal -> newDescodificador
名为
fonte
canal
的程序是由教授制作的,其他的是我的

问题是在终端中运行程序,程序的输出通过管道传递到最后一个。在将程序的输出
newcodecador
传递到
canal
之前,我需要读取输出的长度,然后作为程序的参数传递

它必须是这样的:

./fonte 1000 | python newCodificador.py | ./canal <<lenght of the output of newCodificador>> | python newDescodificador.py
/fonte 1000 | python newcodiccador.py |/canal | python newDescodificador.py

首先,正如您所描述的,make对这个问题没有用处

其次,您无法使用单个管道解决此问题。管道的工作方式是同时调用所有程序,并将它们的输入/输出连接在一起。但是在
newcodecador.py
程序完成之前,您无法启动
canal
程序,因为在这之前,您不知道输出将持续多长时间

必须分两步运行这些程序:第一步是:

./fonte 1000 | python newCodificador.py > tmpfile
./canal $(wc -c tmpfile) < tmpfile | python newDescodificador.py
第二步是:

./fonte 1000 | python newCodificador.py > tmpfile
./canal $(wc -c tmpfile) < tmpfile | python newDescodificador.py
/canal$(wc-c tmpfile)

或者类似的东西。

我无法想象你认为这与makefiles有什么关系。你说过问题是执行四个命令(使用args),并将结果管道化。这只是一个小脚本,为什么你认为使用Makefile可以添加任何东西,你可以同样使用UNIX shell?是否需要参数化可执行文件名?唯一的参数是用户给定的“1000”值,其余部分是程序生成的,但我需要将python newcodecador.py输出的长度作为./canal的参数传递。我尝试过它。问题是wc-c输出是>tmpfile。教授设计的
nC.py |../canal
非常糟糕<代码>运河
应在内部读取并计算其输入长度。这使得所有东西都可以像@MadScientist说的那样在一个管道中链接起来。是的,我知道,但我什么也做不了,我不能编辑教授给我的代码。嗯,这是一个家庭作业,对吗?您应该愿意做一些工作:)。有很多方法可以解决这个问题:通过sed将
wc
的输出传输到sed,只获取第一个单词;或者使用
stat
程序而不是
wc
只打印文件大小;让
newcodecador.py
计算大小并打印出来,然后通过在backticks中运行第一个管道来捕获它;还有更多的选择。多亏了你,疯狂科学家,我已经解决了我的问题。我编辑了一点你的代码,让它工作,只是/canal$(cat tmpfile | wc-c)