是否可以在shell命令中的反引号之间执行Python程序?

时间:2014-01-19 20:40:06

标签: python shell backticks

我正在尝试执行Python程序,将其输出重定向到文件,并将该文件的内容与现有文件进行比较,所有这些都在一个shell命令中。这就是我所拥有的,但当然它不起作用:

diff `python3 program.py > redirect_file.txt` compare_file.txt

我是一个Linux菜鸟,所以任何指导我正确方向的帮助都会很棒。

3 个答案:

答案 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