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

Tyl*_*ler 1 python shell backticks

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

diff `python3 program.py > redirect_file.txt` compare_file.txt
Run Code Online (Sandbox Code Playgroud)

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

Gun*_*ica 9

diff命令允许您-在命令行上使用a 来使用stdin,因此请尝试:

python3 program.py | diff - compare_file.txt
Run Code Online (Sandbox Code Playgroud)


Pal*_*lec 5

你的命令

diff `python3 program.py > redirect_file.txt` compare_file.txt
Run Code Online (Sandbox Code Playgroud)

由于不正确使用反引号而无效.反引号与双引号的不同之处仅在于它们的内容由shell评估并由其标准输出替换.因为您将命令的标准输出重定向到文件,所以反引号现在评估为空字符串.因此,您的命令相当于:

python3 program.py > redirect_file.txt
diff "" compare_file.txt
Run Code Online (Sandbox Code Playgroud)

但你想要:

python3 program.py > redirect_file.txt
diff redirect_file.txt compare_file.txt
Run Code Online (Sandbox Code Playgroud)

如果redirect_file.txt仅用于diff,则可以避免创建它并加快进程:

python3 program.py | diff - compare_file.txt
Run Code Online (Sandbox Code Playgroud)

这使用pipe(|),它基本上将左侧命令的标准输出连接到右侧命令的标准输入.当-给出Diff 而不是实际文件名时,Diff读取标准输入,这是shell实用程序中非常常见的约定.

您还可以使用特定于Bash的语法

diff <(python3 program.py) compare_file.txt
Run Code Online (Sandbox Code Playgroud)

但这不是便携式的,并且创建了一个命名管道,这是不必要的和潜在的麻烦来源.