如何使用管道将文本应用到程序中

如何使用管道将文本应用到程序中

我的老师说使用管道将包含测试用例列表的文本文件应用到从输入文件获取测试用例的工作程序。说我有

test_cases.txt
my_program //my java program after compliation

当我这样做时

java my_program | test_cases.txt

它给

[1]+ Stopped               java my_program | test_cases.txt

不知道如何使用管道...

答案1

首先,一根管道连接两个流程,而不是文件(包括文本文件),这样一个文件的输出就会转到另一个文件的输入。假设“生成”输出的进程将其发送到STDOUT,成为管道的源,而“接收”输入的进程从 读取输出STDIN,成为管道的目的地。您不能将管道连接到文本文件或任何其他文件,而只能连接到进程。

其次,当使用管道时,管道左侧的进程使用STDOUT,管道右侧的进程使用STDIN。因此,您尝试的命令将尝试发送输出my_program管道,而不是从中读取。

如果您正确地呈现了所给的说明,那么无论如何它都无法工作。指令以“...工作程序从输入文件中获取测试用例”结尾。如果程序从文件获取输入,那么它不是从 读取STDIN,并且无论如何都会忽略管道中的数据。

为了使其与管道一起工作,my_program必须编写为从 读取STDIN,就像期望您在提示时手动键入测试用例一样。然后你可以将命令行重写为

cat text_cases.txt | jave my_program

cat是一个过程它将读取文本文件并将其内容发送到STDOUT,然后将使用管道my_program“读取”数据,而不是手动输入。STDIN由于我不知道java如何与管道连接,这是基于它将以标准方式运行的假设,因为讲师要求您使用该方法。

恕我直言,由于资源使用量较少,使用重定向比管道更好。

java my_program < test_cases.txt

也就是说,除非这一步将包含在稍后需要使用管道的过程中的更大的流程链中。

相关内容