我正在尝试执行Python程序,将其输出重定向到文件,并将该文件的内容与现有文件进行比较,所有这些都在一个shell命令中。这就是我所拥有的,但当然它不起作用:
diff `python3 program.py > redirect_file.txt` compare_file.txt
我是一个Linux菜鸟,所以任何指导我正确方向的帮助都会很棒。
答案 0 :(得分:9)
diff命令允许您在命令行上使用-
来使用stdin,所以请尝试:
python3 program.py | diff - compare_file.txt
答案 1 :(得分:5)
你的命令
diff `python3 program.py > redirect_file.txt` compare_file.txt
由于不正确使用反引号,无法正常工作。反引号与双引号的不同之处仅在于它们的内容由shell评估并由其标准输出替换。因为您将命令的标准输出重定向到文件,所以反引号现在评估为空字符串。因此,您的命令等同于:
python3 program.py > redirect_file.txt
diff "" compare_file.txt
但你想要:
python3 program.py > redirect_file.txt
diff redirect_file.txt compare_file.txt
如果redirect_file.txt
仅用于差异,您可以避免创建它并加快过程:
python3 program.py | diff - compare_file.txt
这使用管道(|
),它基本上将左侧命令的标准输出连接到右侧命令的标准输入。当给出-
而不是实际文件名时,Diff读取标准输入,这是shell实用程序中非常常见的约定。
您还可以使用特定于Bash的语法
diff <(python3 program.py) compare_file.txt
但这不是可移植的并且创建了一个命名管道,这是不必要的和潜在的麻烦来源。
答案 2 :(得分:4)
试试这个:
python3 program.py > redirect_file.txt && diff redirect_file.txt compare_file.txt