【发布时间】:2014-11-24 14:59:44
【问题描述】:
有没有办法创建一个 python 脚本来包装整个 bash 命令,包括管道。
例如,如果我有以下简单脚本
import sys
print sys.argv
并这样称呼它(来自 bash 或 ipython),我得到了预期的结果:
[pkerp@pendari trell]$ python test.py ls
['test.py', 'ls']
但是,如果我添加一个管道,脚本的输出会被重定向到管道接收器:
[pkerp@pendari trell]$ python test.py ls > out.txt
> out.txt 部分不在 sys.argv 中。我知道 shell 会自动处理这个输出,但我很好奇是否有办法强制 shell 忽略它并将其传递给被调用的进程。
这样做的目的是为外壳创建类似包装器的东西。我想定期运行命令,但跟踪每个命令(包括管道)的 strace 输出。理想情况下,我想保留所有 bash 功能,例如制表符补全、上下箭头和历史搜索,然后通过调用子进程来处理它的 python 脚本传递完成的命令。
这可能吗,还是我必须编写自己的 shell 才能做到这一点?
编辑
看来我问的问题与this question 完全相同。
【问题讨论】:
-
术语说明:这不是管道,而是输出重定向。
-
你是对的。对于那个很抱歉。这一点仍然适用。如果不是重定向而是管道,问题仍然存在。