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