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菜鸟,所以任何指导我正确方向的帮助都会很棒.
diff命令允许您-在命令行上使用a 来使用stdin,因此请尝试:
python3 program.py | diff - compare_file.txt
Run Code Online (Sandbox Code Playgroud)
你的命令
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)
但这不是便携式的,并且创建了一个命名管道,这是不必要的和潜在的麻烦来源.