限制管道和重定向(Python3)

时间:2014-11-16 02:27:38

标签: python-3.x

我有一个程序,它接受用户的标准输入并通过命令行运行。有没有办法使程序忽略管道和重定向?

例如:python program.py < input.txt > output.txt就像你放入python program.py

一样

1 个答案:

答案 0 :(得分:0)

在一般情况下,没有简单的方法可以找到用户启动的终端。您可以使用一些技术,但它们并不总是有效。

您可以使用os.isatty()来检测文件(例如sys.stdinsys.stdout)是否显示为交互式终端会话。您可能会连接到用户启动程序之外的终端会话,因此这不是万无一失的。这样的终端会议甚至可能在程序而不是人类的控制之下。

在Unix下,进程有一个“控制终端”的概念。您可以通过os.ctermid()与之交谈。但是用户可以在启动进程之前操作此值。您也可能根本没有控制终端,例如如果作为守护进程运行。

您可以检查父进程并查看其任何文件描述符是否已连接到终端会话。不幸的是,我不知道有任何跨平台的方式来做到这一点。在Linux上,我从os.getppid()/proc文件系统开始(参见proc(5))。如果父进程已退出(例如,用户在bash下运行your_program.py & disown; exit),则无效。但在那种情况下,你无论如何也无能为力。