2015-01-17 6 views
-1

저는 피실험자의 교수가 제공 한 다른 두 개의 프로그램과 함께 작동하는 두 개의 파이썬 스크립트를 만들고 있습니다.명령 줄 파이핑 네 개의 명령

프로그램이이 순서 작업 :

fonte -> newCodificador -> canal -> newDescodificador 

fontecanal라는 이름의이 프로그램은 교수에 의해 만들어진, 다른 사람이 내입니다.

문제는 터미널에서 프로그램을 실행하면 프로그램의 출력이 파이프로 전달됩니다. 마지막 하나에. newCodificador의 출력을 canal으로 전달하기 전에 출력 길이를 읽은 다음 프로그램의 인수로 전달해야합니다.

그것은이 같은 수 있습니다,

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

나는 이것이 메이크 파일과 어떤 관련이 있다고 생각하는지 상상할 수 없다. –

+0

당신은 문제가 4 개의 명령 (args)을 실행하고, 결과를 파이핑한다고합니다. 이것은 약간의 스크립팅 일 뿐이며, Makefile을 사용하면 아무 것도 추가하지 않을 것이라고 생각합니까? UNIX 쉘을 똑같이 사용할 수 있습니까? 실행 파일 이름을 매개 변수화해야합니까? – smci

+0

유일한 인수는 사용자가 제공 한 "1000"값입니다. 나머지는 프로그램이지만, 파이썬 newCodificador.py의 출력 길이를 ./canal의 인수로 전달해야합니다. –

답변

2

먼저 당신이 그것을 설명한대로,이 문제에 대한 유용하지 않습니다합니다.

둘째, 단일 파이프 라인을 사용하여이 문제를 해결할 수 없습니다. 파이프 라인은 입력/출력을 함께 연결하여 모든 프로그램을 동시에 호출하여 작동합니다. 그러나 newCodificador.py 프로그램이 완료 될 때까지는 canal 프로그램을 시작할 수 없습니다. 그 때까지는 출력이 얼마나 오래지 알 수 없기 때문입니다.

당신 두 단계로 다음을 실행해야합니다 : 첫 번째 단계는 다음과 같습니다

./fonte 1000 | python newCodificador.py > tmpfile 

다음 두 번째 단계는 다음과 같습니다 그런

./canal $(wc -c tmpfile) < tmpfile | python newDescodificador.py 

또는 무언가를.

+0

나는 wc -c 출력이 << 길이의 파일 >> tmpfile 인 것을 시도했다. –

+1

교수가'nC.py | ./canal << nC.py >>'출력의 길이. 운하는 내부적으로 입력 길이를 읽고 계산해야한다. @MadScientist와 같이 단일 파이프에서 모든 것을 연결할 수 있습니다. – smci

+0

Yap 나는 알고있다. 그러나 나는 아무것도 할 수 없다, 나는 교수가 나에게 준 코드를 편집 할 수 없다. –