Python子流程模块:代码是做什么的?



这段代码在做什么?

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 变量的一种方式。

最新更新