【发布时间】:2020-08-14 19:11:57
【问题描述】:
我正在尝试运行以下命令,其中 AAA 和 BBB 是包含一堆多行数据的 Python 变量。
我宁愿不要通过将变量写入磁盘来减慢自己的速度。看来subprocess.Popen 应该以某种方式支持这一点。
diff <(echo AAA) <(echo BBB)
我知道这在 shell 级别上的工作方式有一个微妙之处,我没有掌握,这可能会让这变得轻而易举。
如何在 Python 中调用一个 shell 可执行文件,使用子进程,并带有两个包含 Python 变量的输入重定向?
【问题讨论】:
-
Popen()的返回值有一个stdin属性(假设您在创建对象时传递了stdin=PIPE)。在此调用.write()两次,将您的AAA和BBB值传递给它。 -
您是否尝试从 Python 调用
diff?或者您是否尝试将两个 Python 脚本的输出输入到 shell 中的diff中?我不太明白你想做什么。 -
<(echo AAA)是进程替换,而不是重定向。 Bash 异步运行echo AAA并将其标准输出重定向到 FIFO,然后将<(echo AAA)替换为 FIFO 的路径。运行set -x; diff <(echo AAA) <(echo BBB),你会看到实际执行的命令类似于diff /dev/fd/63 /dev/fd/62。 -
我猜你可以在 Python 中使用 FIFO 做同样的事情。
-
如果您想使用 Python 获得差异,您是否尝试使用 difflib?
标签: python bash subprocess io-redirection