这段代码在做什么?
with open(temp_path) as f:
command = "xdg-open"
subprocess.Popen(
["im=$(cat);" + command + " $im; rm -f $im"], shell=True, stdin=f
)
我对子流程部分感到困惑... 外壳脚本有什么作用?
im=$(cat)
使用cat
读取标准输入,并将结果分配给变量im
。由于您使用stdin=f
,因此读取temp_path
的内容。
command + " $im;`
执行命令xdg-open
,$im
作为其参数。因此,这将使用文件的内容作为参数来xdg-open
,这将在其默认应用程序中打开文件。由于参数应该是文件名,这意味着temp_path
包含文件名。
rm -f $im
删除打开的文件。
这似乎是一种愚蠢的方法。更好的编写方法是:
with open(temp_path) as f:
filename = f.read().strip()
command = "xdg-open"
subprocess.Popen([command, filename])
os.remove(filename)
虽然我还没有看到脚本的其余部分,但我怀疑以这种方式执行此操作时临时路径也是不必要的——似乎它只是将其用作将文件名放入 shell 变量的一种方式。